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

  • AutoHotkey Tutorials

    AutoHotkey T

    29 Mayıs 2010
  • Lupe Fiasco

    Lupe Fiasco

    23 ŞUBAT 2006
  • sonia989

    sonia989

    26 EKİM 2006