"Java" programoje noriu konvertuoti dvigubą skaičių į sveiką skaičių, žinau, ar tai darote:
double x = 1.5;
int y = (int)x;
gausite y=1. Jei atliksite taip:
int y = (int)Math.round(x);
Greičiausiai gausite 2. Tačiau man įdomu: kadangi sveikųjų skaičių dvigubas atvaizdavimas kartais atrodo kaip 1,999999999998 ar panašiai, ar yra tikimybė, kad atvaizduojant dvigubą skaičių, sukurtą naudojant Math.round(), vis tiek bus gautas sutrumpintas skaičius, o ne suapvalintas skaičius, kurio ieškome (t. y.: 1 vietoj 2 pateiktame kode)?
(ir taip, aš tikrai taip ir noriu pasakyti: Ar yra kokia nors x reikšmė, kurios atveju y rodys rezultatą, kuris bus ne suapvalintas, o sutrumpintas x atvaizdas?)
Jei taip: ar yra geresnis būdas dvigubą skaičių paversti suapvalintu int nerizikuojant, kad jis bus sutrumpintas?
Kažką supratau: Math.round(x) grąžina long, o ne double. Taigi: neįmanoma, kad Math.round() grąžintų skaičių, panašų į 3,9999998. Todėl int(Math.round()) niekada nereikės nieko trumpinti ir visada veiks.
ar yra tikimybė, kad dvigubą skaičių, sukurtą naudojant
Math.round()
, vis tiek gausime sutrumpintą skaičių
Ne, round()
visada suapvalins jūsų dvigubą skaičių iki teisingos vertės, o tada jis bus paverstas long
, kuris sutrumpins visus dešimtainio skaičiaus ženklus. Tačiau po apvalinimo neliks jokių trupmeninių dalių.
Čia pateikiami dokumentai iš Math.round(double)
:
Grąžinamas argumentui artimiausias long. Rezultatas apvalinamas iki sveikojo skaičiaus pridedant 1/2, paimant rezultato apatinę ribą ir perkeliant rezultatą į long tipą. Kitaip tariant, rezultatas yra lygus išraiškos vertei:
(long)Math.floor(a + 0,5d)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
Išspręstas mano tikslas.