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ť.
existuje možnosť, že pri obsadzovaní dvojnásobku vytvoreného pomocou
Math.round()
bude stále výsledkom skrátené číslo
Nie, funkcia round()
vždy zaokrúhli vaše dvojčíslie na správnu hodnotu a potom bude odovzdané na long
, ktorý skráti všetky desatinné miesta. Po zaokrúhlení však nezostanú žiadne zlomkové časti.
Tu sú dokumenty z Math.round(double)
:
Vráti najbližší long k argumentu. Výsledok sa zaokrúhli na celé číslo tak, že sa pripočíta 1/2, zoberie sa dolná hranica výsledku a výsledok sa prevedie na typ long. Inými slovami, výsledok sa rovná hodnote výrazu:
(long)Math.floor(a + 0,5d)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
Vyriešilo môj účel.