2011-09-23 7 views
5
BigDecimal bd= new BigDecimal("00.0000000000"); 
//now bd format to 0E-10 
if(BigDecimal.ZERO.equals(bd) || bd.equals("0E-10")) 
{ 
flag=true; 
} 

条件は、それすなわち、偽の値をもたらした場合、変数BDが自動的0E-10 BigDecimalの問題

  • にフォーマットする理由上記のコードでは二つの問題

    1. があります。ブロックの場合、の内部には入りません。

    誰でもお勧めできます。おかげ

  • 答えて

    12

    あなたは10桁の小数点以下のコンストラクタを与えてくれたので、それらのすべてがゼロであっても、BigDecimalは10にその内部scaleを設定することを決定しましたこれは"0E-10"-10を説明します。 equalsJavadoc saysに関しては

    は平等のために指定されたObjectでこれBigDecimalを比較します。 compareToとは異なり、このメソッドでは、値と位取りが等しい場合にのみ( 2.00と等しくない場合)、の2つのオブジェクトが であるとみなします。

    ボトムライン:

    1. 利用compareTo()の代わりequals()
    2. BigDecimalStringを直接比較しないでください。これは機能しません。
    5

    また、(あなたの場合には10である)ので、失敗したスケールを含ん

    bd.signum() == 0 
    

    BigDecimal.equalsを使用してゼロをテストすることができます。通常、BigDecimalsを比較するには、compareToを使用する必要があります。

    1

    BigDecimalは、小数点の後に10桁を指定しているため、小数点以下10桁を使用します。

    最初の部分では、0と00.00000000000を比較しています(縮尺が異なるため、同じではありません)。次に、StringとBigDecimalを比較します。どちらが動作しません。