SORU
14 AĞUSTOS 2012, Salı


BigDecimal sıfır ile çarpın

BigDecimal ile basit bir çarpma işlemi gerçekleştirmeden ve sıfır (sıfır ile çarparak bu durum kullanımda doğrudur) çarparak zaman bazı garip davranışlar buldum.

Temel matematik her şeyi sıfır çarpı sıfır (:Zero Product Property Multiplication Properties) eşit olacağını söyledi

Ancak, aşağıdaki kod sürekli aynı hata ile başarısız olur:

assertEquals(new BigDecimal(0), new BigDecimal(22.3).multiply(new BigDecimal(0)));
java.lang.AssertionError: 
Expected :0
Actual   :0E-48

Bu BigDecimal ile bir yanlışlık ya da bir yerlerde atladığım matematik bazı niş şube var mı?

Notlar: komple cam 1.6.0_27 Aracı 11 çalışan

CEVAP
14 AĞUSTOS 2012, Salı


Bu onaylama işlemi yapar gibi BigDecimals karşılaştırmak equals() yöntemi kullanabilirsiniz. Bu işlev karşılaştırır eşit olmasıdırölçek. Eğer ölçek farklı ise, equals() eğer aynı sayıda matematiksel olarak olsa bile yanlış dönecektir.

Ancak compareTo() istediğiniz gibi kullanabilirsiniz:

@Assylias işaret ettiği gibi, aynı zamanda çift hassas sorunları önlemek için new BigDecimal("22.3") yapıcı kullanmalısınız.

BigDecimal expected = BigDecimal.ZERO;
BigDecimal actual = new BigDecimal("22.3").multiply(BigDecimal.ZERO);
assertEquals(0, expected.compareTo(actual));

Ayrıca bir yöntem signum(), negatif, sıfır döndürür -1, 0 veya 1 olarak adlandırılan, ve pozitif. Ayrıca sıfır ile test edebilirsiniz

assertEquals(0, actual.signum());

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • merumputdotcom

    merumputdotc

    24 ŞUBAT 2012
  • RaverX DouBle StAg XI

    RaverX DouBl

    23 Mayıs 2008
  • WHZGUD2

    WHZGUD2

    21 EYLÜL 2011