Şamandıra hassas kaybetmeden çifte dönüştürmek
İlkel bir şamandıra var ve bir ilkel çift olarak ihtiyacım var. Sadece çift için kaydır döküm bana garip ekstra hassasiyet verir. Örneğin:
float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375
Döküm yerine, bir string olarak kaydır çıktı, ve bir çift olarak dizeyi ayrıştırmak ancak, ben istediğimi alırım:
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35
Dize ve geri dönmek için daha iyi bir yolu var mı?
CEVAP
Sensin o değilaslındaekstra hassas - kaydır doğru aslında nişan aldın numarasını temsil etmedi. Çiftorijinal kaydır doğru; toString
gösteriyor temsil eden "ekstra" zaten mevcut olan veri.
Örneğin (ve bu rakamlar doğru değil, sadece bir şeyler uyduruyorum) desteği vardı:
float f = 0.1F;
double d = f;
f
değerini tam olarak 0.100000234523 olabilir. d
olacak tam olarak aynı değer, ama dönüştürmek için bir dize. "güven" işte bu doğru bir yüksek hassasiyetli, çok yaramaz yuvarlak olarak erken ve göreceksin "ekstra basamak" neymiş onlar zaten var, ama gizli.
Sen bir dizeye dönüştürmek ve geri geldiğinde, orijinal kaydır daha dize değerine yakın olan çift bir değer ile biten sensin - ama bu sadece iyieğergerçekten dize değeri gerçekten istediği şey olduğuna inanıyorum.
/Çift şamandıra burada BigDecimal
yerine kullanmak için uygun bir tür olduğundan emin misin? Eğer hassas ondalık değerleri olan sayılar (örneğin para) kullanmak için çalışıyorsanız, o zaman BigDecimal
daha uygun bir tür IMO.
Bir Dizi hassas kaybetmeden git o Java...
Güvenli şamandıra python tamsayı dönüş...
Şamandıra Swift İnt dönüştürmek...
Nasıl 2D int numpy dizi için 2D şamand...
Dize PHP DateTime dönüştürmek...