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

  • BruBearBaby

    BruBearBaby

    25 Ocak 2011
  • chrmoe

    chrmoe

    7 Kasım 2006
  • RawBrahs

    RawBrahs

    28 Aralık 2010