Manipulowanie liczbami całkowitolicznikowymi i zmiennoprzecinkowych
Ten samouczek zawiera informacje o typach liczbowych w języku C# interaktywnie przy użyciu przeglądarki. Napiszesz język C# i zobaczysz wyniki kompilowania i uruchamiania kodu. Zawiera on cykl lekcji dotyczących liczb i operacji matematycznych w języku C#. Te lekcje umożliwiają poznanie podstaw języka C#.
Napiwek
Aby wkleić fragment kodu w trybie koncentracji uwagi, należy użyć skrótu klawiaturowego (Ctrl + v lub cmd + v).
Poznawanie matematyki całkowitoliczbowej
Uruchom poniższy kod w oknie interaktywnym. Wybierz przycisk Enter focus mode (Wprowadź tryb koncentracji uwagi). Następnie wpisz następujący blok kodu w oknie interaktywnym i wybierz pozycję Uruchom:
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);
Jeśli pracujesz nad środowiskiem, należy zamiast tego postępować zgodnie z instrukcjami dotyczącymi wersji lokalnej.
Znasz jedną z podstawowych operacji matematycznych z liczbami całkowitymi. Typ int
reprezentuje liczbę całkowitą — ujemną lub dodatnią. Symbol +
umożliwia dodawanie. Inne typowe operacje matematyczne na liczbach całkowitych obejmują:
- odejmowanie —
-
- mnożenie —
*
- dzielenie —
/
Napiwek
W tym interaktywnym samouczku możesz zapoznać się samodzielnie, modyfikując kod napisany w oknie interaktywnym. Ten samouczek zawiera przykłady, które można wypróbować w każdym kroku.
Rozpocznij od wypróbowania różnych operacji. Zmodyfikuj trzeci wiersz, tak aby użyć każdej z następujących operacji. Po każdej edycji wybierz przycisk Uruchom .
Subtraction (odejmowanie):
int c = a - b;
Multiplication (mnożenie):
int c = a * b;
Division (dzielenie):
int c = a / b;
Możesz również eksperymentować, pisząc wiele operacji matematycznych w tym samym wierszu, jeśli chcesz.
Napiwek
Podczas nauki języka C# (lub dowolnego języka programowania) będziesz robić błędy przy pisaniu kodu. Kompilator znajdzie te błędy i zgłosi je. Jeśli dane wyjściowe zawierają komunikaty o błędach, sprawdź uważnie przykładowy kod oraz kod w oknie interaktywnym, aby znaleźć fragmenty wymagające poprawienia. To ćwiczenie pomoże Ci poznać strukturę kodu w języku C#.
Poznawanie kolejności operacji
Język C# definiuje kolejność wykonywania różnych operacji matematycznych zgodnie z regułami spójnymi z regułami przedstawianymi na lekcjach matematyki. Mnożenie i dzielenie ma priorytet przed dodawaniem i odejmowaniem. Zaobserwuj to, uruchamiając poniższy kod w oknie interaktywnym:
int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);
Dane wyjściowe świadczą, że mnożenie jest wykonywane przed dodawaniem.
Inną kolejność operacji można wymusić, dodając nawiasy wokół operacji, które mają zostać wykonane jako pierwsze:
int a = 5;
int b = 4;
int c = 2;
int d = (a + b) * c;
Console.WriteLine(d);
Dowiedz się więcej, łącząc wiele różnych operacji. Zastąp czwarty wiersz powyżej wierszem podobnym do następującego:
int d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Być może zwróciło Twoją uwagę interesujące zachowanie liczb całkowitych. Dzielenie całkowitoliczbowe zawsze daje w wyniku liczbę całkowitą, nawet jeśli oczekiwało się części dziesiętnej lub ułamkowej.
Jeśli nie widzisz tego zachowania, spróbuj wykonać następujący kod:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
Console.WriteLine(d);
Wybierz ponownie pozycję Uruchom , aby wyświetlić wyniki.
Poznawanie precyzji i limitów liczb całkowitych
Ostatni przykład pokazuje, że dzielenie całkowitoliczbowe obcina wynik.
Resztę można uzyskać, używając operatora reszty, %
znaku:
int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
int e = (a + b) % c;
Console.WriteLine($"quotient: {d}");
Console.WriteLine($"remainder: {e}");
Typ całkowitoliczbowy języka C# różni się od matematycznych liczb całkowitych jeszcze tym, że typ int
ma limit maksimum i minimum. Uruchom następujący kod w oknie interaktywnym, aby zobaczyć te limity:
int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");
Jeśli obliczenia generują wartość, która przekracza te limity, występuje warunek niedopełnienia lub przepełnienia. Odpowiedź wydaje się zawijać między limitami. Dodaj dwa następujące wiersze do okna interaktywnego, aby zobaczyć przykład:
int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");
Zwróć uwagę, że odpowiedź jest bardzo zbliżona do minimalnej (ujemnej) liczby całkowitej. Jej wartość jest równa min + 2
.
Operacja dodawania spowodowała przepełnienie wartości dozwolonych dla liczb całkowitych.
Odpowiedź to bardzo duża liczba ujemna, ponieważ przepełnienie powoduje „zawinięcie” z największej możliwej liczby całkowitej do najmniejszej.
Istnieją inne typy liczbowe z innymi limitami i precyzją, których możesz użyć, jeśli typ int
nie spełnia wymagań. Przyjrzyjmy się następnym typom liczb.
Praca z typem double
Typ liczbowy double
reprezentuje liczbę zmiennoprzecinkową o podwójnej precyzji. Te pojęcia mogą być dla Ciebie nowe. Liczby zmiennoprzecinkowe są przydatne do reprezentowania bardzo małych lub bardzo dużych liczb innych niż liczby całkowite. Podwójna precyzja to termin względny opisujący liczby cyfr binarnych używanych do przechowywania wartości. Liczby podwójnej precyzji mają dwukrotnie większą liczbę cyfr binarnych jako pojedynczą precyzję. W przypadku współczesnych komputerów częściej są używane liczby podwójnej precyzji niż pojedynczej precyzji. Pojedyncze liczby precyzji są deklarowane przy użyciu słowa kluczowego float
.
Przyjrzyjmy się im. Wypróbuj poniższy kod w oknie interaktywnym i zobacz wynik:
double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);
Zwróć uwagę, że odpowiedź obejmuje część dziesiętną ilorazu. Spróbuj nieco bardziej skomplikowanego wyrażenia z liczbami podwójnej precyzji:
double a = 19;
double b = 23;
double c = 8;
double d = (a + b) / c;
Console.WriteLine(d);
Zakres wartości liczb podwójnej precyzji jest dużo większy niż liczb całkowitych. Wypróbuj poniższy kod w oknie interaktywnym:
double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");
Wartości zostaną wyświetlone za pomocą notacji naukowej. Liczba po lewej stronie znaku E
to mantysa. Liczba po jego prawej stronie to wykładnik jako potęga 10.
Podobnie jak w przypadku liczb dziesiętnych w matematyce, przy używaniu liczb podwójnej precyzji w języku C# mogą wystąpić błędy zaokrąglania. Wypróbuj ten kod:
double third = 1.0 / 3.0;
Console.WriteLine(third);
Wiesz, że jest to 0.3
i nie jest 3/10
dokładnie takie samo jak 1/3
. Podobnie wartość 0.33
to 33/100
. To bliżej 1/3
, ale nadal nie jest dokładne.
Wyzwanie
Wypróbuj inne obliczenia z dużą liczbą, małymi liczbami, mnożeniem i dzieleniem double
przy użyciu typu . Spróbuj bardziej skomplikowanych obliczeń.
Praca z typami dziesiętnymi
Przedstawiono podstawowe typy danych liczbowych w języku C#: typ całkowitoliczbowy i typ podwójnej precyzji. Istnieje jeszcze jeden typ do nauki: decimal
typ. Typ decimal
ma mniejszy zakres, lecz większą precyzję niż typ double
. Spójrzmy:
decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");
Zwróć uwagę, że zakres jest mniejszy niż w przypadku typu double
. Większą precyzję typu dziesiętnego możesz zobaczyć, uruchamiając następujący kod:
double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);
decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);
Zwróć uwagę na to, że operacje matematyczne wykonywane na liczbach typu dziesiętnego mają więcej cyfr po prawej stronie przecinka dziesiętnego.
Sufiks M
liczb wskazuje, że stałe powinny używać typu decimal
. W przeciwnym razie kompilator zakłada double
typ.
Uwaga
Litera M
została wybrana jako najbardziej wizualnie odrębna litera między słowami kluczowymi double
i decimal
.
Wyzwanie
Teraz, gdy różne typy liczbowe zostały już przedstawione, napisz kod obliczający pole koła o promieniu 2,5 cm. Pole koła to promień pomnożony przez liczbę pi do kwadratu. Wskazówka: platforma .NET zawiera stałą dla liczby pi — Math.PI — której możesz użyć. Math.PI, podobnie jak wszystkie stałe zadeklarowane w System.Math
przestrzeni nazw, jest wartością double
. Z tego powodu należy użyć double
wartości zamiast decimal
wartości dla tego wyzwania.
Odpowiedź powinna należeć do zakresu 19-20.
Ukończenie wyzwania
Czy Twój pomysł był podobny do poniższego?
double radius = 2.50;
double area = Math.PI * radius * radius;
Console.WriteLine(area);
Wypróbuj także inne wzory, jeśli chcesz.
Gratulacje!
Ukończono interaktywny samouczek "Numery w języku C#". Możesz wybrać link Gałęzie i pętle poniżej, aby rozpocząć kolejny interaktywny samouczek, lub odwiedzić witrynę platformy .NET, aby pobrać zestaw SDK platformy .NET, utworzyć projekt na maszynie i kontynuować kodowanie. Sekcja "Następne kroki" umożliwia powrót do tych samouczków.
Więcej informacji na temat liczb w języku C# można uzyskać w następujących artykułach:
Widzisz problem w tej sekcji? W takim przypadku prześlij opinię, abyśmy mogli udoskonalić tę sekcję.