Visual C# double egész számot ad vissza?
"a" változót deklarálnom kéne az alábbi művelettel 2 tizedesjegy pontosságig, azonban hiába adom meg a változó típusát double-ben, kiiratásnál egész számot (72) ad vissza még úgy is, ha kiiratásnál megadom, hogy hány tizedesjegyig mutassa a számot.
double a = 6532 / (12 + 88) + 782 / (44 + 56);
Console.WriteLine("{0:#.##}", a);
Hogy tudnám kiiratni 2 tizedesjegyig az adott számot? Előre is köszönöm a segítséget!
Amikor műveleteket végzel, akkor a részműveletben mindig legalább az egyik szám double kell, hogy legyen, de te mindenhol egész számot adtál meg. Ezért az "a" változódban is valami hülyeség jelenik meg. Osztás és szorzás esetén az egyik operandus mindig legyen double, vagy konvertáld double-é:
double a = (double)6532 / (12 + 88) + (double)782 / (44 + 56);
double b = 6532.0 / (12 + 88) + 782.0 / (44 + 56);
double c = Double.Parse("6532") / (12 + 88) + Double.Parse("782") / (44 + 56);
...
Az értékadás úgy működik, hogy egy változónak értékül adsz egy kifejezést, és ha a kifejezés típusa eltér a változó típusától, akkor a program megpróbál implicit konverziót végezni a kettő között, ha ez nem sikerül, jön a hiba. A lényeg, hogy először a kifejezés értékét kapod meg, és csak utána veszi figyelembe, hogy milyen típusú változónak kell átadnia. Ergo, a program először kiszámolja azt a sor összeadást és osztást, akkor mégnem tudja, hogy ő egy double típust fog ebből csinálni. Annyit lát, hogy egész számokat akarsz összeadni és osztani. ÉS az egész számokkal végzett műveletek eredménye a legtöbb programozási nyelvben szintén egész szám lesz.
<int> + <int> -> <int>
<int> / <int> -> <int>
Ha te azt akarod, hogy aq kifejezés maga alapból lebegőpontos szám legyen, akkor muszáj ráerőltetned, hogy a számokat double-ként kezelje, pl így:
6532.0 / (12 + 88 ) + 782.0 / (44 + 56)
Így a műveletek a következőképp fognak végrehajtódni:
(<float> / (<int> + <int> )) + (<float> / (<int> + <int> ))
-> (<float> / <int>) + (<float> + <int>)
-> <float> + <float>
-> <float>
Mint látod, elég volt a 6532 és a 782 mögé odatenni a tizedespontot, mivel ha egy művelet egyik oldalán float van, akkor az eredmény is float lesz.
Egy másik megközelítés, hogy a számokat explicit float-ra (vagy double-re) castolod:
(double)6532 / (12 + 88) + (double)782 / (44 + 56)
Így megkapod az eredményt, ami 73.14
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!