SORU
7 EKİM 2008, Salı


Nasıl Java Yuvarlama Çift bir sorunu gidermek için

Çıkarma sorunu falan tetikliyor gibi görünüyor ve sonuç değeri Yanlış.

double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d;

78.75 = 787.5 * 10.0/100d

double netToCompany = targetPremium.doubleValue() - tempCommission;

708.75 = 787.5 - 78.75

double dCommission = request.getPremium().doubleValue() - netToCompany;

877.8499999999999 = 1586.6 - 708.75

Sonuç beklenen değer 877.85 olurdu.

Doğru hesaplanmasını sağlamak için neler yapılmalı?

CEVAP
7 EKİM 2008, Salı


Kayan nokta aritmetik doğruluğunu kontrol etmek, java.math.BigDecimal kullanmalısınız. Daha fazla bilgi için John Zukowski The need for BigDecimal okuyun.

Örnek verilen, son satırı olarak BigDecimal kullanarak aşağıdaki olacaktır.

import java.math.BigDecimal;

BigDecimal premium = BigDecimal.valueOf(1586.6d);
BigDecimal netToCompany = BigDecimal.valueOf(708.75d);
BigDecimal commission = premium.subtract(netToCompany);
System.out.println(commission   " = "   premium   " - "   netToCompany);

Bu, aşağıdaki sonuçlar çıktı.

877.85 = 1586.6 - 708.75

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bobbylee Budde

    Bobbylee Bud

    13 ŞUBAT 2011
  • jpmkm1

    jpmkm1

    4 NİSAN 2008
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008