Jak používat celočíselná čísla a čísla s plovoucí desetinou čárkou v jazyce C#

V tomto kurzu se seznámíte s číselnými typy v jazyce C#. Napíšete malé množství kódu a pak ho zkompilujete a spustíte. Tento kurz obsahuje řadu lekcí, které se zabývají čísly a matematickými operacemi v jazyce C#. V těchto kurzech se seznámíte se základy jazyka C#.

Tip

Pokud chcete vložit fragment kódu do detailního režimu , měli byste použít klávesovou zkratku (Ctrl + v nebo cmd + v).

Požadavky

Kurz očekává, že máte počítač nastavený pro místní vývoj. Pokyny k instalaci a přehled vývoje aplikací v .NET najdete v tématu Nastavení místního prostředí .

Pokud nechcete nastavit místní prostředí, podívejte se na interaktivní verzi tohoto kurzu v prohlížeči.

Seznámení s matematikou celých čísel

Vytvořte adresář s názvem numbers-quickstart. Nastavte ho jako aktuální adresář a spusťte následující příkaz:

dotnet new console -n NumbersInCSharp -o .

Důležité

Šablony jazyka C# pro .NET 6 používají příkazy nejvyšší úrovně. Pokud jste už upgradovali na .NET 6, vaše aplikace nemusí odpovídat kódu v tomto článku. Další informace najdete v článku o nových šablonách jazyka C# generování příkazů nejvyšší úrovně.

Sada .NET SDK 6 také přidává sadu implicitníchglobal using direktiv pro projekty, které používají následující sady SDK:

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

Tyto implicitní global using direktivy zahrnují nejběžnější obory názvů pro typ projektu.

Další informace najdete v článku o implicitních direktivách using.

Ve svém oblíbeném editoru otevřete soubor Program.cs a nahraďte obsah souboru následujícím kódem:

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

Spusťte tento kód zadáním v příkazovém dotnet run okně.

Viděli jste jednu ze základních matematických operací s celými čísly. Typ int představuje celé číslo, nulové, kladné nebo záporné celé číslo. Pro sčítání se používá symbol +. K dalším běžným matematickým operacím s celými čísly patří tyto:

  • - pro odčítání
  • * pro násobení
  • / pro dělení

Nejdřív si vyzkoušejte uvedené operace. Přidejte tyto řádky za řádek, který zapisuje hodnotu :c

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

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

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

Spusťte tento kód zadáním v příkazovém dotnet run okně.

Pokud chcete, můžete také experimentovat tak, že napíšete několik matematických operací na stejný řádek. Zkuste c = a + b - 12 * 17; to například. Je povoleno kombinování proměnných a konstantních čísel.

Tip

Když se budete učit pracovat s C# (nebo každým jiným programovacím jazykem), budete při psaní kódu dělat chyby. Kompilátor tyto chyby odhalí a upozorní vás na ně. Pokud výstup obsahuje chybové zprávy, podívejte se pozorně na ukázkový kód a kód v okně a zjistěte, co je potřeba opravit. Toto cvičení vám pomůže seznámit se se strukturou kódu v C#.

Dokončili jste první krok. Než začnete s další částí, přesuneme aktuální kód do samostatné metody. Metoda je řada příkazů seskupených a zadaných názvem. Zavoláte metodu zápisem názvu metody následovaného (). Uspořádání kódu do metod usnadňuje zahájení práce s novým příkladem. Po dokončení by měl váš kód vypadat takto:

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

Řádek WorkWithIntegers(); vyvolá metodu . Následující kód deklaruje metodu a definuje ji.

Seznámení s pořadím operací

Zakomentujte volání na WorkingWithIntegers()adresu . Výstup bude při práci v této části méně nepřehledný:

//WorkWithIntegers();

Spustí //komentář v jazyce C#. Komentáře jsou jakýkoli text, který chcete zachovat ve zdrojovém kódu, ale nespouštět jako kód. Kompilátor negeneruje z komentářů žádný spustitelný kód. Vzhledem k tomu WorkWithIntegers() , že se jedná o metodu, stačí zakomentovat jenom jeden řádek.

Jazyk C# definuje prioritu různých matematických operací v souladu se stejnými pravidly, jaká jste se naučili při hodinách matematiky. Násobení a dělení mají přednost před sčítáním a odčítáním. Prozkoumejte to přidáním následujícího kódu za volání a WorkWithIntegers()spuštěním dotnet runpříkazu :

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

Z výstupu vyplývá, že operace násobení se provede dřív než operace sčítání.

Jiné pořadí operací můžete vynutit přidáním závorek kolem operace nebo operací, které chcete provést jako první. Přidejte následující řádky a spusťte příkaz znovu:

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

Teď prozkoumáme i další možnosti s kombinací několika různých operací. Přidejte něco podobného jako na následujících řádcích. Znovu zkuste příkaz dotnet run.

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

Můžete si u celých čísel všimnout zvláštního chování. Výsledkem dělení celých čísel je vždycky celé číslo, i když byste očekávali, že bude výsledek obsahovat číslo s desetinnou čárkou nebo zlomek.

Pokud jste toto chování nezaznamenali, vyzkoušejte následující kód:

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

Znovu zadejte dotnet run , aby se zobrazily výsledky.

Než budete dál, vezmeme veškerý kód, který jste napsali v této části, a vložíme ho do nové metody. Zavolejte novou metodu OrderPrecedence. Váš kód by měl vypadat přibližně takto:

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

Seznámení s přesností a limity celých čísel

Z poslední ukázky jste se dozvěděli, že při dělení celých čísel dochází ke zkrácení výsledku. Zbytek můžete získat pomocí operátoru modulo, znaku % . Zkuste následující kód po volání OrderPrecedence()metody :

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

Od celých čísel v matematice se typ integer v jazyce C# se liší v jednom ohledu: typ int má minimální a maximální limit. Pokud chcete zobrazit tato omezení, přidejte tento kód:

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

Pokud je výsledkem určitého výpočtu hodnota, která tyto limity překračuje, nastane stav podtečení nebo přetečení. Odpověď cyklicky přechází od jednoho limitu k druhému. Pokud chcete vidět příklad, přidejte tyto dva řádky:

int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");

Všimněte si, že se odpověď těsně blíží minimálnímu (zápornému) celému číslu. Je stejná jako při operaci min + 2. Operace sčítání přetekla povolené hodnoty celých čísel. Výsledkem je velmi velké záporné číslo, protože při přetečení došlo k „cyklickému přechodu“ od nejvyšší možné celočíselné hodnoty k nejnižší.

Existují i další číselné typy s různými limity a přesností, které můžete použít, pokud typ int nevyhovuje vašim potřebám. V dalším kroku se na tyto další typy podíváme. Než začnete s další částí, přesuňte kód, který jste napsali v této části, do samostatné metody. Pojmenujte ji TestLimits.

Práce s typem double

Číselný typ double představuje číslo s plovoucí desetinnou čárkou a dvojitou přesností. Tyto výrazy možná ještě neznáte. Číslo s plovoucí desetinnou čárkou slouží k reprezentaci jiných než celých čísel, která mohou být buď velmi nízká, nebo velmi vysoká. Dvojitá přesnost je relativní termín, který popisuje počet binárních číslic použitých k uložení hodnoty. Čísla s dvojitou přesností mají dvojnásobný počet binárních číslic s jednoduchou přesností. V moderních počítačích je častější používat dvojitou přesnost než čísla s jednoduchou přesností. Čísla s jednoduchou přesností se deklarují pomocí klíčového float slova. Pojďme se na to podívat blíž. Přidejte následující kód a podívejte se na výsledek:

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

Všimněte si, že odpověď obsahuje desetinnou část podílu. Teď zkusíme zadat o něco složitější výraz s čísly typu double:

double e = 19;
double f = 23;
double g = 8;
double h = (e + f) / g;
Console.WriteLine(h);

Rozsah hodnoty double je mnohem větší než u hodnot typu integer. Vyzkoušejte následující kód pod tím, co jste zatím napsali:

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

Tyto hodnoty jsou vytištěny ve vědeckém zápisu. Číslu vlevo od písmene E se říká mantisa. Číslo vpravo se označuje jako exponent a značí násobky 10. Stejně jako desetinná čísla v matematice můžou mít i hodnoty typu double v C# chyby zaokrouhlení. Vyzkoušejte tento kód:

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

Víte, že 0.3 opakování konečného počtu opakování není úplně stejné jako 1/3.

Úkol

Vyzkoušejte jiné výpočty s velkými čísly, malými čísly, násobením a dělením double pomocí typu. Zkuste zadat i složitější výpočty. Poté, co jste s výzvou strávili nějaký čas, vezměte kód, který jste napsali, a umístěte ho do nové metody. Pojmenujte novou metodu WorkWithDoubles.

Práce s desetinnými typy

Seznámili jste se se základními typy čísel v jazyce C#: celými čísly a čísly s dvojitou přesností. Je tu ještě jeden typ, který decimal se můžete naučit: typ. Typ decimal má menší rozsah, ale zato větší přesnost než typ double. Podívejme se na to:

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

Všimněte si, že je rozsah menší než u typu double. Větší přesnost typu decimal si můžete ověřit zadáním následujícího kódu:

double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);

decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);

Přípona M za čísly představuje způsob, jak naznačit, že má konstanta používat typ decimal. V opačném případě kompilátor předpokládá double typ.

Poznámka

M Písmeno bylo vybráno jako vizuálně nejvýraznější písmeno mezi klíčovými double slovy adecimal.

Všimněte si, že výsledek s typem decimal má napravo od desetinné čárky víc číslic.

Úkol

Seznámili jste se s různými typy čísel a teď můžete napsat kód, který vypočítá obsah kruhu s poloměrem 2,50 centimetru. Obsah kruhu se vypočítá jako poloměr na druhou krát číslo pí. Nápověda: Prostředí .NET obsahuje pro číslo pí konstantu Math.PI, kterou můžete pro tuto hodnotu použít. Math.PI, stejně jako všechny konstanty deklarované v System.Math oboru názvů, je double hodnota. Z tohoto důvodu byste pro tuto výzvu měli použít double místo decimal hodnot.

Měl by vám vyjít výsledek mezi 19 a 20. Odpověď můžete zkontrolovat tak , že se podíváte na hotový ukázkový kód na GitHubu.

Jestli chcete, můžete si vyzkoušet i další vzorce.

Dokončili jste rychlý start Čísla v jazyce C#. Ve vlastním vývojovém prostředí můžete pokračovat v rychlém startu Větve a smyčky .

Další informace o číslech v jazyce C# najdete v následujících článcích: