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ť.

Riešenie

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)

Komentáre (3)

Pre dátový typ Double na int môžete použiť nasledovné:

Double double = 5.00;

int integer = double.intValue();
Komentáre (2)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

Vyriešilo môj účel.

Komentáre (0)