konverzia dvojciferného čísla na celé číslo v jazyku java
V Jave chcem previesť dvojnásobok na celé číslo, viem, či to robíte:
double x = 1.5;
int y = (int)x;
dostanete y=1. Ak urobíte toto:
int y = (int)Math.round(x);
Pravdepodobne dostanete 2. Zaujímalo by ma však: keďže dvojnásobné reprezentácie celých čísel niekedy vyzerajú ako 1,999999999998 alebo niečo podobné, existuje možnosť, že vrhnutie dvojnásobku vytvoreného cez Math.round() bude mať stále za následok skrátené číslo smerom nadol, a nie zaokrúhlené číslo, ktoré hľadáme (t. j.: 1 namiesto 2 v reprezentovanom kóde) ?
(a áno, myslím to tak: Existuje akákoľvek hodnota pre x, pri ktorej y zobrazí výsledok, ktorý je skráteným, a nie zaokrúhleným reprezentovaním x?)
Ak áno: Existuje lepší spôsob, ako z double urobiť zaokrúhlený int bez rizika skrátenia?
Niečo som zistil: Math.round(x) vráti long, nie double. Preto: nie je možné, aby Math.round() vrátilo číslo vyzerajúce ako 3,9999998. Preto int(Math.round()) nikdy nebude musieť nič skracovať a vždy bude fungovať.
Nie, funkcia
round()
vždy zaokrúhli vaše dvojčíslie na správnu hodnotu a potom bude odovzdané nalong
, ktorý skráti všetky desatinné miesta. Po zaokrúhlení však nezostanú žiadne zlomkové časti.Tu sú dokumenty z
Math.round(double)
:(long)Math.floor(a + 0,5d)
Pre dátový typ
Double
naint
môžete použiť nasledovné:Vyriešilo môj účel.