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

  • amc

    amc

    21 EYLÜL 2005
  • Hollyscoop

    Hollyscoop

    30 Ocak 2007
  • TokShogun

    TokShogun

    6 HAZİRAN 2009