SORU
27 Mayıs 2009, ÇARŞAMBA


Ş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
27 Mayıs 2009, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Nickcidious

    Nickcidious

    6 HAZİRAN 2011
  • ThePhestor

    ThePhestor

    22 Mart 2011
  • Toddler Fun Learning

    Toddler Fun

    8 ŞUBAT 2013