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

  • Harvest: Greg Laurie

    Harvest: Gre

    6 HAZİRAN 2006
  • LimeFire

    LimeFire

    2 ŞUBAT 2012
  • Propaganda Time

    Propaganda T

    19 EYLÜL 2010