Udostępnij za pośrednictwem


Jak używać liczb całkowitych i zmiennoprzecinkowych w języku C#

Ten samouczek zawiera informacje o typach liczbowych w języku C#. Piszesz małe ilości kodu, a następnie kompilujesz i uruchamiasz ten kod. Samouczek zawiera serię lekcji, które eksplorują liczby i operacje matematyczne w języku C#. Te lekcje nauczą Cię podstaw języka C#.

Napiwek

Gdy blok fragmentu kodu zawiera przycisk "Uruchom", ten przycisk otwiera okno interakcyjne lub zastępuje istniejący kod w oknie interaktywnym. Gdy fragment kodu nie zawiera przycisku "Uruchom", możesz skopiować kod i dodać go do bieżącego okna interaktywnego.

Eksplorowanie matematycznych liczb całkowitych

Uruchom następujący kod w oknie interaktywnym.

int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);

Powyższy kod demonstruje podstawowe operacje matematyczne z liczbami całkowitymi. Typ int reprezentuje liczbę całkowitą , dodatnią lub ujemną liczbę całkowitą. Do dodawania należy użyć symbolu +. Inne typowe operacje matematyczne dla liczb całkowitych to:

  • - dla odejmowania
  • * do mnożenia
  • / do dzielenia

Zacznij od zapoznania się z tymi różnymi operacjami. Zmodyfikuj trzeci wiersz, aby wypróbować każdą z tych operacji. Aby na przykład spróbować odjąć, zastąp + na -, jak pokazano w następującym wierszu:

int c = a - b;

Wypróbuj. Wybierz przycisk "Uruchom". Następnie spróbuj mnożenia, * i dzielenia, /. Możesz również eksperymentować, pisząc wiele operacji matematycznych w tym samym wierszu, jeśli chcesz.

Napiwek

Podczas eksplorowania języka C# (lub dowolnego języka programowania) popełniasz błędy podczas pisania kodu. Kompilator odnajduje te błędy i zgłasza je Tobie. Gdy dane wyjściowe zawierają komunikaty o błędach, przyjrzyj się bliżej przykładowemu kodowi i kodowi w oknie interaktywnym, aby zobaczyć, co należy naprawić. To ćwiczenie pomaga poznać strukturę kodu w języku C#.

Eksplorowanie kolejności operacji

Język C# definiuje pierwszeństwo różnych operacji matematycznych z regułami zgodnymi z regułami poznanymi w matematyce. Mnożenie i dzielenie mają pierwszeństwo przed dodawaniem i odejmowaniem. Zapoznaj się z tym, uruchamiając następujący kod w oknie interaktywnym:

int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);

Dane wyjściowe pokazują, że mnożenie jest wykonywane przed dodatkami.

Możesz wymusić inną kolejność operacji, dodając nawiasy wokół operacji lub operacji, które mają zostać wykonane jako pierwsze. Dodaj następujące wiersze do okna interaktywnego:

d = (a + b) * c;
Console.WriteLine(d);

Dowiedz się więcej, łącząc wiele różnych operacji. Zastąp czwarty wiersz w poprzednim kodzie następującym kodem:

d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);

Możesz zauważyć ciekawe zachowanie liczb całkowitych. Dzielenie liczb całkowitych zawsze generuje wynik liczby całkowitej, nawet jeśli oczekiwano, że wynik będzie zawierał część dziesiętną lub ułamkową.

Spróbuj wykonać następujący kod:

int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
Console.WriteLine(d);

Badanie precyzji i ograniczeń liczb całkowitych

W ostatnim przykładzie pokazano, że dzielenie całkowite powoduje obcięcie wyniku. Pozostałe można uzyskać przy użyciu operatora pozostałego, 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 liczby całkowitej języka C# różni się od matematycznych liczb całkowitych w inny sposób: typ int ma minimalne i maksymalne limity. Spróbuj wykonać następujący kod, aby zobaczyć te limity:

int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");

Jeśli obliczenie generuje wartość, która przekracza te limity, masz warunek niedopełnienia lub przepełnienia . Odpowiedź wydaje się zawijać z jednego limitu do drugiego. Aby zobaczyć przykład, dodaj te dwa wiersze w oknie interaktywnym:

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. To jest to samo co min + 2. Operacja dodawania przekroczyła dozwolone wartości dla liczb całkowitych. Odpowiedź jest dużą liczbą ujemną, ponieważ przepełnienie "zawija się" z największej możliwej wartości całkowitej do najmniejszej.

Istnieją inne typy liczbowe z różnymi limitami i precyzją, których można użyć, gdy typ int nie spełnia Twoich potrzeb. Przyjrzyjmy się następnym typom liczb.

Praca z podwójnym typem

Typ liczbowy double reprezentuje liczbę zmiennoprzecinkową o podwójnej precyzji. Te terminy mogą być dla Ciebie nowe. Liczba zmiennoprzecinkowa jest przydatna do reprezentowania liczb niecałkowitych, które mogą być duże lub małe pod względem wartości. podwójna precyzja to termin względny opisujący liczbę cyfr binarnych używanych do przechowywania wartości. Liczby podwójnej precyzji mają dwukrotnie więcej cyfr binarnych niż liczby pojedynczej precyzji. Na nowoczesnych komputerach częściej używa się podwójnej precyzji niż liczby pojedynczej precyzji. Liczby pojedynczej precyzji są deklarowane przy użyciu słowa kluczowego float. Przyjrzyjmy się. Uruchom następujący kod i zobacz wynik:

double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);

Zauważ, że odpowiedź zawiera część dziesiętną ilorazu. Spróbuj nieco bardziej skomplikowane wyrażenie z podwójnymi wartościami. Możesz użyć następujących wartości lub zastąpić inne liczby:

double a = 19;
double b = 23;
double c = 8;
double d = (a + b) / c;
Console.WriteLine(d);

Zakres podwójnej wartości jest większy niż wartości całkowite. Wypróbuj następujący kod w oknie interaktywnym:

double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");

Te wartości są drukowane w notacji naukowej. Liczba przed E jest znakiem. Liczba po E jest wykładnikiem, jako potęgą 10.

Podobnie jak liczby dziesiętne w matematyce, liczby podwójne w języku C# mogą mieć błędy zaokrąglania. Wypróbuj ten kod:

double third = 1.0 / 3.0;
Console.WriteLine(third);

Wiesz, że 0.3 jest 3/10 i nie jest dokładnie taki sam jak 1/3. Podobnie 0.33 jest 33/100. Ta wartość jest bliższa 1/3, ale nadal nie jest dokładna. Bez względu na liczbę dodanych miejsc dziesiętnych pozostaje błąd zaokrąglania.

Wyzwanie

Wypróbuj inne obliczenia z dużą liczbą, małymi liczbami, mnożeniem i dzieleniem przy użyciu typu double. Spróbuj wykonać bardziej skomplikowane obliczenia.

Praca z typami dziesiętnymi

Jest jeszcze jeden typ, którego należy się nauczyć: typ decimal. Typ decimal ma mniejszy zakres, ale większą precyzję niż double. Przyjrzyjmy się:

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ż typ double. Większą precyzję można zobaczyć przy użyciu typu dziesiętnego, próbując wykonać 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ę, że matematyka używająca typu dziesiętnego ma więcej cyfr po prawej stronie przecinka dziesiętnego.

Sufiks M na liczbach wskazuje, że należy używać typu decimal dla stałej. W przeciwnym razie kompilator zakłada typ double.

Notatka

Litera M została wybrana jako najbardziej wizualnie odrębna litera między double a słowami kluczowymi decimal.

Wyzwanie

Napisz kod, który oblicza obszar okręgu, którego promień wynosi 2,50 centymetrów. Należy pamiętać, że obszar okręgu jest promieniem kwadratowym pomnożonym przez pi. Jedna wskazówka: platforma .NET zawiera stałą dla pi, Math.PI, której można użyć dla tej wartości. Math.PI, podobnie jak wszystkie stałe zadeklarowane w przestrzeni nazw System.Math, jest wartością double. Z tego powodu należy użyć wartości double zamiast wartości decimal w tym wyzwaniu.

Powinnaś uzyskać odpowiedź w zakresie od 19 do 20.

Po wypróbowaniu otwórz okienko szczegółów, aby zobaczyć, jak to zrobiłeś:

:::code language="csharp" interactive="try-dotnet-method" source="./snippets/NumbersInCsharp/Program.cs" id="Challenge":::

Wypróbuj inne formuły, jeśli chcesz.

Ukończono interaktywny samouczek "Numery w języku C#". Możesz wybrać link Gałęzie i pętle, aby rozpocząć następny 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: