Ćwiczenie — odnajdywanie typów zmiennoprzecinkowych
- {liczbaMinut} minut
W tym ćwiczeniu pracujesz z typami danych zmiennoprzecinkowych, aby dowiedzieć się więcej o zniuansowanych różnicach między poszczególnymi typami danych.
Typ zmiennoprzecinkowy to prosty typ wartości reprezentujący liczby po przecinku. W przeciwieństwie do liczb całkowitych istnieją inne zagadnienia wykraczające poza wartości maksymalne i minimalne, które można przechowywać w danym typie zmiennoprzecinkowym.
Ocena typów zmiennoprzecinkowych
Najpierw należy wziąć pod uwagę cyfry dokładności, na które pozwala każdy typ. Precyzja to liczba miejsc wartości przechowywanych po przecinku dziesiętny.
Po drugie, należy wziąć pod uwagę sposób przechowywania wartości i wpływ na dokładność wartości. Na przykład wartości float i double są przechowywane wewnętrznie w formacie binarnym (system dwójkowy, base 2), a wartości decimal są przechowywane w formacie dziesiętnym (system dziesiętny, base 10). Dlaczego ma to znaczenie?
Wykonywanie obliczeń matematycznych na binarnych wartościach zmiennoprzecinkowych może generować wyniki, które mogą cię zaskoczyć, jeśli używasz wartości dziesiętnych (base 10). Często binarna matematyka zmiennoprzecinkowa jest przybliżeniem wartości rzeczywistej. W związku z tym float i double są przydatne, ponieważ duże liczby mogą być przechowywane przy użyciu małej ilości pamięci. Należy jednak używać go tylko wtedy, floatdouble gdy przybliżenie jest przydatne. Na przykład, jeżeli podczas obliczania rozprysku śnieżki w grze wideo pomylimy się o kilka tysięcznych, to nadal będzie wystarczająco dokładne.
Jeśli potrzebujesz bardziej precyzyjnej odpowiedzi, należy użyć polecenia decimal. Każda wartość typu decimal ma stosunkowo duże zużycie pamięci, jednak wykonywanie operacji matematycznych daje bardziej precyzyjny wynik. Dlatego należy użyć decimal podczas pracy z danymi finansowymi lub w dowolnym scenariuszu, w którym potrzebujesz dokładnego wyniku obliczenia.
Użyj właściwości MinValue i MaxValue dla każdego podpisanego typu zmiennoprzecinkowego
Usuń kod lub użyj operatora komentarza w poniższej linii
//, aby oznaczyć jako komentarz cały kod z poprzednich ćwiczeń.Aby wyświetlić zakresy wartości dla różnych typów danych, zaktualizuj kod w edytorze programu Visual Studio Code w następujący sposób:
Console.WriteLine("");
Console.WriteLine("Floating point types:");
Console.WriteLine($"float : {float.MinValue} to {float.MaxValue} (with ~6-9 digits of precision)");
Console.WriteLine($"double : {double.MinValue} to {double.MaxValue} (with ~15-17 digits of precision)");
Console.WriteLine($"decimal: {decimal.MinValue} to {decimal.MaxValue} (with 28-29 digits of precision)");
W menu Plik programu Visual Studio Code wybierz pozycję Zapisz.
Przed utworzeniem lub uruchomieniem kodu należy zapisać plik Program.cs.
W panelu EKSPLORATOR, aby otworzyć terminal w lokalizacji folderu TestProject, kliknij prawym przyciskiem myszy pozycję TestProject, a następnie wybierz polecenie Otwórz w zintegrowanym terminalu.
Panel terminalu powinien zostać otwarty i powinien zawierać wiersz polecenia pokazujący, że terminal jest otwarty w lokalizacji folderu TestProject.
W wierszu polecenia terminalu, aby uruchomić kod, wpisz dotnet run , a następnie naciśnij Enter.
Jeśli zostanie wyświetlony komunikat "Nie można odnaleźć projektu do uruchomienia", upewnij się, że w wierszu polecenia terminalu zostanie wyświetlona oczekiwana lokalizacja folderu TestProject. Przykład:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Powinny zostać wyświetlone następujące dane wyjściowe:
Floating point types: float : -3.402823E+38 to 3.402823E+38 (with ~6-9 digits of precision) double : -1.79769313486232E+308 to 1.79769313486232E+308 (with ~15-17 digits of precision) decimal: -79228162514264337593543950335 to 79228162514264337593543950335 (with 28-29 digits of precision)
Jak widać, float i double używają innej notacji niż jest używana przez decimal do reprezentowania swoich największych i najmniejszych możliwych wartości. Ale co to oznacza notacja?
Rozszyfrowywanie dużych wartości zmiennoprzecinkowych
Ponieważ typy zmiennoprzecinkowe mogą przechowywać duże liczby z dokładnością, ich wartości mogą być reprezentowane przy użyciu notacji E, która jest formą notacji naukowej oznaczającą "razy 10 do danej potęgi". W związku z tym wartość 5E+2 wynosi 500, ponieważ jest to odpowiednik 5 * 10^2 lub 5 x 102.
Podsumowanie
- Typ zmiennoprzecinkowy to prosty typ danych wartości, który może zawierać liczby ułamkowe.
- Wybranie odpowiedniego typu zmiennoprzecinkowego dla aplikacji wymaga uwzględnienia więcej niż tylko maksymalnych i minimalnych wartości, które może przechowywać. Należy również wziąć pod uwagę liczbę wartości, które można zachować po przecinku, sposób przechowywania liczb oraz wpływ ich magazynu wewnętrznego na wynik operacji matematycznych.
- Wartości zmiennoprzecinkowe mogą być czasami reprezentowane przy użyciu notacji "E", gdy liczby rosną szczególnie duże.
- Istnieje podstawowa różnica w sposobie, w jaki środowisko uruchomieniowe i kompilator obsługują
decimalw przeciwieństwie dofloatlubdouble, zwłaszcza przy określaniu, jakiej dokładności wymagają operacje matematyczne.
Sprawdź swoją wiedzę
Opinia
Czy ta strona była pomocna?
Nie
Potrzebujesz pomocy dotyczącej tego tematu?
Chcesz spróbować użyć asystenta Ask Learn, aby wyjaśnić ten temat lub uzyskać instrukcje, które go dotyczą?