Egész számok és lebegőpontos számok használata C-ben#

Ez az oktatóanyag bemutatja a C#-ban található numerikus típusokat. Kis mennyiségű kódot fog írni, majd lefordítja és futtatja a kódot. Az oktatóanyag olyan leckéket tartalmaz, amelyek a C#-ban található számokat és matematikai műveleteket vizsgálják. A leckékből fokozatosan elsajátíthatja a C# programnyelv alapismereteit.

Tipp

Ha kódrészletet szeretne beilleszteni a fókusz módba , használja a billentyűparancsot (Ctrl + v vagy cmd + v).

Előfeltételek

Az oktatóanyag azt várja, hogy a gép be van állítva a helyi fejlesztéshez. Lásd: A helyi környezet beállítása telepítési utasításokhoz és az alkalmazásfejlesztés áttekintése a .NET-ben.

Ha nem szeretne helyi környezetet beállítani, tekintse meg az oktatóanyag interaktív böngészőben elérhető verzióját.

Matematikai műveletek egész számokkal

Hozzon létre egy numbers-quickstart nevű könyvtárat. Legyen az aktuális könyvtár, és futtassa a következő parancsot:

dotnet new console -n NumbersInCSharp -o .

Fontos

A .NET 6 C#-sablonjai legfelső szintű utasításokat használnak. Előfordulhat, hogy az alkalmazás nem egyezik meg a cikkben szereplő kóddal, ha már frissített a .NET 6-ra. További információ: Új C#-sablonok legfelső szintű utasítások létrehozása

A .NET 6 SDK emellett implicitglobal using direktívákat is hozzáad az alábbi SDK-t használó projektekhez:

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

Ezek az implicit global using irányelvek tartalmazzák a projekttípus leggyakoribb névtereit.

További információ: Implicit using irányelvek

Nyissa meg a Program.cs fájlt a kedvenc szerkesztőjében, és cserélje le a fájl tartalmát a következő kódra:

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

Futtassa ezt a kódot úgy, hogy beírja dotnet run a parancsablakba.

Látta az egyik alapvető matematikai műveletet egész számokkal. A inttípus egész számot, nullát, pozitívat vagy negatív egész számot jelöl. Összeadáshoz a + szimbólumot használhatja. Többek között az alábbi gyakori szimbólumokat is használhatja még egész számokkal:

  • - szimbólum kivonáshoz
  • * szimbólum szorzáshoz
  • / szimbólum osztáshoz

Kezdésként próbálja ki ezeket a további műveleteket. Adja hozzá ezeket a sorokat a értékét megíró csor után:

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

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

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

Futtassa ezt a kódot úgy, hogy beírja dotnet run a parancsablakba.

Kísérletezhet úgy is, hogy több matematikai műveletet ír ugyanabban a sorban, ha szeretné. Próbálkozzon c = a + b - 12 * 17; például. A változók és az állandó számok keverése engedélyezett.

Tipp

A C# (vagy bármely más programnyelv) elsajátítása során óhatatlanul fog néha hibázni a kód írásakor. A fordító azonosítja ezeket a hibákat, és jelenti őket Önnek. Ha a kimenet hibaüzeneteket tartalmaz, tekintse meg alaposan a példakódot és az ablakban lévő kódot, hogy lássa, mit kell kijavítania. Ha így tesz, az segíthet megérteni a C#-kód struktúráját.

Befejezte az első lépést. A következő szakasz megkezdése előtt helyezze át az aktuális kódot egy külön metódusba. A metódus egy utasítássorozat, amely egy csoportba van csoportosítva, és nevet ad. Meghívhat egy metódust a metódus nevének megírásával, majd a következővel (): . Ha metódusokba rendezi a kódot, könnyebben elkezdhet dolgozni egy új példán. Amikor végzett, a kódnak a következőképpen kell kinéznie:

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

A sor WorkWithIntegers(); meghívja a metódust. Az alábbi kód deklarálja a metódust, és meghatározza azt.

A műveleti sorrend megértése

A hívás megjegyzése a következőhöz: WorkingWithIntegers(). Az ebben a szakaszban végzett munka során a kimenet kevésbé lesz zsúfolt:

//WorkWithIntegers();

A // C #-ban megjegyzést kezd. A megjegyzések olyan szövegek, amelyeket meg szeretne őrizni a forráskódban, de nem kódként kell végrehajtani őket. A fordító nem hoz létre végrehajtható kódot a megjegyzésekből. Mivel WorkWithIntegers() ez egy metódus, csak egy sort kell megjegyzésbe fűznie.

A C# nyelv a matematika megszokott szabályainak megfelelő sorrendben hajtja végre a matematikai műveleteket. A szorzást és az osztást előbb végzi el a rendszer, mint az összeadást és a kivonást. Ezt úgy ismerheti meg, hogy hozzáadja a következő kódot a hívás WorkWithIntegers()után, és végrehajtja a következőt dotnet run:

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

A kimenetben láthatja, hogy a szorzás az összeadás előtt lett végrehajtva.

Más műveleti sorrendet kényszeríthet, ha zárójeleket ad hozzá az elsőként végrehajtandó művelethez vagy műveletekhez. Adja hozzá a következő sorokat, és futtassa újra:

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

Próbálja ki, hogy kombinál többféle műveletet. Vegyen fel valami hasonlót az alábbi sorokhoz. Próbálkozzon újra a következővel: dotnet run.

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

Itt megfigyelhet egy érdekes részletet az egész számok viselkedésével kapcsolatban. Az egész számokkal való osztás egész számot ad eredményül még akkor is, ha az eredménynek tizedes tört részt kellene tartalmaznia.

Ha még nem látta ezt a viselkedést, próbálkozzon a következő kóddal:

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

Írja be dotnet run újra az eredményt.

Mielőtt továbblépne, vegyük át az ebben a szakaszban írt összes kódot, és helyezzük el egy új metódusba. Hívja meg ezt az új metódust OrderPrecedence. A kódnak a következőképpen kell kinéznie:

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

Az egész számok pontossága és korlátai

Az utolsó példában láthatta, hogy az egész számokkal való osztás csonkolt számot ad eredményül. A maradékot a modulo operátorral, a karakterrel szerezheti be % . A metódus meghívása OrderPrecedence()után próbálkozzon a következő kóddal:

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

A C# nyelv által definiált egész szám eltér a matematikai egész számoktól egy további módon is: az int típus rendelkezik egy minimum és egy maximum értékkel. Adja hozzá ezt a kódot a korlátok megtekintéséhez:

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

Ha egy számítás eredménye túllép az alsó vagy a felső korláton, akkor alulcsordulás vagy túlcsordulás történik. Az eredmény ilyen esetben körbefut az egyik határértékről a másikig. Adja hozzá ezt a két sort egy példa megtekintéséhez:

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

Megfigyelheti, hogy az eredmény nagyon közel esik az egész számok minimális (negatív) értékéhez. Megegyezik a min + 2 kifejezés értékével. Az összeadási művelet túlcsordulást okozott, mivel az eredmény nagyobb volt az egész számok maximális értékénél. Ezért egy rendkívül nagy negatív számot kapott eredményként, mert a túlcsordulás „körbefut” a legnagyobb lehetséges egész számtól a legkisebbig.

Léteznek más numerikus típusok is eltérő precizitással és korlátokkal, melyeket használhat, ha az int típus nem felel meg az igényeinek. Most nézzük meg a többi típust. A következő szakasz megkezdése előtt helyezze át az ebben a szakaszban írt kódot egy külön metódusba. Nevezze el a következőképpen: TestLimits.

A „double” típus használata

A double numerikus típus dupla pontosságú lebegőpontos számot jelöl. Előfordulhat, hogy nem ismeri még ezeket a kifejezéseket. A lebegőpontos szám praktikus módja az olyan nem egész számok jelölésének, amelyek nagy nagyságrendűek lehetnek akár negatív, akár pozitív tartományban. A dupla pontosság egy relatív kifejezés, amely az érték tárolásához használt bináris számjegyek számát írja le. A dupla pontosságú számok kétszer annyi bináris számjegyből állnak, mint egypontosak. A modern számítógépeken gyakoribb, hogy dupla pontosságot használnak, mint az egyszeres pontosságú számokat. Az egyszeres pontosságú számok a kulcsszó használatával float vannak deklarálva. Ismerkedjünk meg ezzel alaposabban. Adja hozzá a következő kódot, és tekintse meg az eredményt:

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

Megfigyelheti, hogy az eredmény tartalmazza a kvóciens tizedes tört részét is. Próbáljon ki egy némileg összetettebb kifejezést double típusú értékekkel:

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

A double típusú értékek tartománya jóval nagyobb az egész szám típusú értékek tartományánál. Próbálja ki az alábbi kódot az eddig írtak alatt:

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

Ezek az értékek tudományos jelölésben jelennek meg. Az E jeltől balra lévő szám a mantissza. A jobbra lévő szám az exponens vagy kitevő, mely a 10 hatványait jelöli. A matematikában használt tizedes tört számokhoz hasonlóan a C# nyelv double típusú számai is tartalmazhatnak kerekítési hibákat. Próbálja ki az alábbi kódot:

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

Tudja, hogy 0.3 az ismétlődő véges számú alkalommal nem pontosan ugyanaz, mint 1/3.

Feladat

Próbáljon ki más számításokat nagy számokkal, kis számokkal, szorzással és osztással a double típus használatával. Kísérletezzen némileg összetettebb számítások végzésével is. Miután eltöltött egy kis időt a kihívással, vegye át a megírt kódot, és helyezze el egy új metódusba. Nevezze el az új metódust WorkWithDoubles.

Decimális típusok használata

A korábbiak során megismerkedhetett a C# alapvető numerikus típusaival: az int és a double típussal. Egy másik típust is meg kell tanulni: a típust decimal . A decimal típus kisebb tartománnyal, de nagyobb pontossággal rendelkezik, mint a double típus. Próbálja ki az alábbi kódot:

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

Láthatja, hogy a tartomány kisebb, mint a double típusé. Megfigyelheti a decimal típus nagyobb pontosságát is, ha beírja az alábbi kódot:

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

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

A konstans értékek után egy M utótagot írva jelezheti, hogy az értéket decimal típusúként szeretné használni. Ellenkező esetben a fordító feltételezi a típust double .

Megjegyzés

A betűt M a és decimal a kulcsszavak közötti double vizuálisan legkülönbözőbb betűnek választották.

Láthatja, hogy a decimális típussal végzett matematikai művelet eredményében több számjegy látható a tizedesvesszőtől jobbra.

Feladat

Most, hogy megismerkedett a különböző számtípusokkal, próbáljon meg írni egy olyan kódot, amely kiszámítja egy 2,50 centiméter sugarú kör területét. Ne feledje, hogy a kör területe a sugár négyzete π-vel megszorozva. Egy tipp: A .NET-keretrendszer tartalmazza a π értékét konstansként (Math.PI), melyet használhat a számításában. Math.PI, mint a System.Math névtérben deklarált összes állandó, egy double érték. Ezért érdemes érték helyett decimal használni double ezt a kihívást.

A kapott eredménynek 19 és 20 között kell lennie. A választ a GitHubon található kész mintakód megtekintésével ellenőrizheti.

Ha szeretne, próbálkozhat további képletek írásával is.

Elvégezte a "Számok C#-ban" rövid útmutatót. A saját fejlesztési környezetében folytathatja az Ágak és hurkok gyorsútmutatót.

A C# számokkal kapcsolatos további információkat az alábbi cikkekben talál: