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#. Napiszesz małe ilości kodu, a następnie skompilujesz i uruchomisz ten kod. Samouczek zawiera serię lekcji, które eksplorują liczby i operacje matematyczne w języku C#. Te lekcje umożliwiają poznanie podstaw języka C#.

Porada

Aby wkleić fragment kodu w trybie koncentracji uwagi , należy użyć skrótu klawiaturowego (Ctrl + v lub cmd + v).

Wymagania wstępne

Samouczek oczekuje, że masz maszynę skonfigurowaną na potrzeby programowania lokalnego. Zobacz Konfigurowanie środowiska lokalnego, aby uzyskać instrukcje dotyczące instalacji i omówienie tworzenia aplikacji na platformie .NET.

Jeśli nie chcesz konfigurować środowiska lokalnego, zobacz interaktywną wersję tego samouczka w przeglądarce.

Poznawanie matematyki całkowitoliczbowej

Utwórz katalog o nazwie numbers-quickstart. Ustaw go na bieżący katalog i uruchom następujące polecenie:

dotnet new console -n NumbersInCSharp -o .

Ważne

Szablony języka C# dla platformy .NET 6 używają instrukcji najwyższego poziomu. Aplikacja może nie być zgodna z kodem w tym artykule, jeśli został już uaktualniony do platformy .NET 6. Aby uzyskać więcej informacji, zobacz artykuł dotyczący nowych szablonów języka C# generowania instrukcji najwyższego poziomu

Zestaw SDK platformy .NET 6 dodaje również zestaw niejawnychglobal using dyrektyw dla projektów korzystających z następujących zestawów SDK:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Te niejawne global using dyrektywy obejmują najbardziej typowe przestrzenie nazw dla typu projektu.

Aby uzyskać więcej informacji, zobacz artykuł dotyczący niejawnych dyrektyw using

Otwórz plik Program.cs w ulubionym edytorze i zastąp zawartość pliku następującym kodem:

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

Uruchom ten kod, wpisując dotnet run w oknie polecenia.

Widzieliśmy jedną z podstawowych operacji matematycznych z liczbami całkowitymi. Typ int reprezentuje liczbę całkowitą, zero, dodatnią lub ujemną liczbę całkowitą. Symbol + umożliwia dodawanie. Inne typowe operacje matematyczne na liczbach całkowitych obejmują:

  • odejmowanie — -
  • mnożenie — *
  • dzielenie — /

Rozpocznij od wypróbowania różnych operacji. Dodaj te wiersze po wierszu, który zapisuje wartość elementu c:

// subtraction
c = a - b;
Console.WriteLine(c);

// multiplication
c = a * b;
Console.WriteLine(c);

// division
c = a / b;
Console.WriteLine(c);

Uruchom ten kod, wpisując dotnet run w oknie polecenia.

Możesz również eksperymentować, pisząc wiele operacji matematycznych w tym samym wierszu, jeśli chcesz. Spróbuj c = a + b - 12 * 17; na przykład. Mieszanie zmiennych i liczb stałych jest dozwolone.

Porada

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. Gdy dane wyjściowe zawierają komunikaty o błędach, przyjrzyj się bliżej przykładowemu kodowi i kodowi w oknie, aby zobaczyć, co należy naprawić. To ćwiczenie pomoże Ci poznać strukturę kodu w języku C#.

Pierwszy krok został ukończony. Przed rozpoczęciem następnej sekcji przenieśmy bieżący kod do oddzielnej metody. Metoda jest serią instrukcji pogrupowanych razem i nadanych nazwie. Metoda jest wywoływana przez napisanie nazwy metody, po której następuje .() Organizowanie kodu w metody ułatwia rozpoczęcie pracy z nowym przykładem. Po zakończeniu kod powinien wyglądać następująco:

WorkWithIntegers();

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


    // subtraction
    c = a - b;
    Console.WriteLine(c);

    // multiplication
    c = a * b;
    Console.WriteLine(c);

    // division
    c = a / b;
    Console.WriteLine(c);
}

Wiersz WorkWithIntegers(); wywołuje metodę . Poniższy kod deklaruje metodę i definiuje ją.

Poznawanie kolejności operacji

Oznacz jako komentarz wywołanie metody WorkingWithIntegers(). Dane wyjściowe będą mniej zaśmiecone podczas pracy w tej sekcji:

//WorkWithIntegers();

Rozpoczyna //komentarz w języku C#. Komentarze to dowolny tekst, który chcesz zachować w kodzie źródłowym, ale nie jest wykonywany jako kod. Kompilator nie generuje żadnego kodu wykonywalnego z komentarzy. Ponieważ WorkWithIntegers() jest metodą, musisz dodać tylko komentarz do jednego wiersza.

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. Zapoznaj się z tym, dodając następujący kod po wywołaniu metody WorkWithIntegers()i wykonując polecenie dotnet run:

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.

Możesz wymusić inną kolejność operacji, dodając nawiasy wokół operacji lub operacji, które chcesz wykonać najpierw. Dodaj następujące wiersze i uruchom ponownie:

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

Dowiedz się więcej, łącząc wiele różnych operacji. Dodaj coś podobnego do poniższych wierszy. Spróbuj ponownie użyć narzędzia dotnet run.

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

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 to zachowanie nie było widoczne, spróbuj wykonać następujący kod:

int e = 7;
int f = 4;
int g = 3;
int h = (e + f) / g;
Console.WriteLine(h);

Wpisz dotnet run ponownie, aby wyświetlić wyniki.

Zanim przejdziemy dalej, weźmy cały kod napisany w tej sekcji i umieśćmy go w nowej metodzie. Wywołaj tę nową metodę OrderPrecedence. Kod powinien wyglądać mniej więcej tak:

// WorkWithIntegers();
OrderPrecedence();

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


    // subtraction
    c = a - b;
    Console.WriteLine(c);

    // multiplication
    c = a * b;
    Console.WriteLine(c);

    // division
    c = a / b;
    Console.WriteLine(c);
}

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

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

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

    int e = 7;
    int f = 4;
    int g = 3;
    int h = (e + f) / g;
    Console.WriteLine(h);
}

Poznawanie precyzji i limitów liczb całkowitych

Ostatni przykład pokazuje, że dzielenie całkowitoliczbowe obcina wynik. Resztę można uzyskać za pomocą operatora modulo, % znaku . Spróbuj wykonać następujący kod po wywołaniu metody na OrderPrecedence():

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. Dodaj ten 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 obliczenia generują wartość, która przekracza te limity, występuje warunek niedopełnienia lub przepełnienia. Odpowiedź wydaje się zawijać między limitami. Dodaj te dwa wiersze, 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. Przed rozpoczęciem następnej sekcji przenieś kod napisany w tej sekcji do oddzielnej metody. Nadaj jej nazwę TestLimits.

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 względny termin opisujący liczbę cyfr binarnych używanych do przechowywania wartości. Liczba podwójnej precyzji ma dwa razy większą liczbę cyfr binarnych jako pojedynczą precyzję. Na nowoczesnych komputerach częściej używa się podwójnej precyzji niż pojedyncze liczby precyzji. Pojedyncze liczby dokładności są deklarowane przy użyciu słowa kluczowego float . Przyjrzyjmy się im. Dodaj następujący kod 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 e = 19;
double f = 23;
double g = 8;
double h = (e + f) / g;
Console.WriteLine(h);

Zakres wartości liczb podwójnej precyzji jest dużo większy niż liczb całkowitych. Spróbuj wykonać poniższy kod poniżej tego, co zostało napisane do tej pory:

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 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 0.3 powtarzana liczba skończonych razy nie jest dokładnie taka sama jak 1/3.

Zadanie

Wypróbuj inne obliczenia z dużą liczbą, małą liczbą, mnożeniem i dzieleniem double przy użyciu typu . Spróbuj bardziej skomplikowanych obliczeń. Po spędzeniu trochę czasu z wyzwaniem zajmij się kodem, który został napisany i umieść go w nowej metodzie. Nadaj nowej metodzie WorkWithDoublesnazwę .

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);

Sufiks M liczb wskazuje, że stałe powinny używać typu decimal. W przeciwnym razie kompilator zakłada double typ.

Uwaga

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

Zwróć uwagę na to, że operacje matematyczne wykonywane na liczbach typu dziesiętnego mają więcej cyfr po prawej stronie przecinka dziesiętnego.

Zadanie

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. Możesz sprawdzić odpowiedź, przeglądając gotowy przykładowy kod w usłudze GitHub.

Wypróbuj także inne wzory, jeśli chcesz.

Ukończono przewodnik Szybki start "Numbers in C#" (Liczby w języku C#). Przewodnik Szybki start dotyczący gałęzi i pętli możesz kontynuować we własnym środowisku projektowym.

Więcej informacji na temat liczb w języku C# można uzyskać w następujących artykułach: