SORU
26 ŞUBAT 2014, ÇARŞAMBA


Java yuvarlak bir çift

Yuvarlama için harika bir çözüm bulduk:

static Double round(Double d, int precise) {
    BigDecimal bigDecimal = new BigDecimal(d);
    bigDecimal = bigDecimal.setScale(precise, RoundingMode.HALF_UP);
    return bigDecimal.doubleValue();
}

Ancak, sonuçlar kafa karıştırıcı

System.out.println(round(2.655d,2)); // -> 2.65
System.out.println(round(1.655d,2)); // -> 1.66

Neden bu çıkış veriyor? Totem 1.7.0_45 kullanıyorum.

CEVAP
26 ŞUBAT 2014, ÇARŞAMBA


Değiştirmek zorunda

BigDecimal bigDecimal = new BigDecimal(d);

ile

BigDecimal bigDecimal = BigDecimal.valueOf(d);

ve beklenen sonuçları elde edersiniz:

2.66
1.66

Java API: açıklama

BigDecimal.değerini(double val)- çift kurallı dize gösterimine Çift tarafından sağlanan kullanır.() olabilirdi yöntemi. Bu bir BigDecimal içine bir çift (veya yüzer) dönüştürmek için tercih edilen yoldur.

new BigDecimal(double val- çift ... kayan nokta ikili değeri tam ondalık gösterimi ve böylece bu yapıcı sonuçlar biraz öngörülemeyen olabilir kullanır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • backyardjay

    backyardjay

    8 ŞUBAT 2009
  • HTC

    HTC

    12 Ocak 2006
  • hytchme

    hytchme

    9 Mart 2014