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

  • bcbauer

    bcbauer

    7 ŞUBAT 2007
  • MkElite

    MkElite

    13 NİSAN 2012
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009