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 int
tí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ó c
sor 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:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: