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の問題
- があります。ブロックの場合、の内部には入りません。
誰でもお勧めできます。おかげ
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の問題
誰でもお勧めできます。おかげ
あなたは10桁の小数点以下のコンストラクタを与えてくれたので、それらのすべてがゼロであっても、BigDecimal
は10にその内部scale
を設定することを決定しましたこれは"0E-10"
で-10
を説明します。 equals
、Javadoc saysに関しては
:
は平等のために指定された
Object
でこれBigDecimal
を比較します。compareTo
とは異なり、このメソッドでは、値と位取りが等しい場合にのみ( 2.00と等しくない場合)、の2つのオブジェクトが であるとみなします。
ボトムライン:
compareTo()
の代わりequals()
。BigDecimal
とString
を直接比較しないでください。これは機能しません。また、(あなたの場合には10である)ので、失敗したスケールを含ん
bd.signum() == 0
BigDecimal.equals
を使用してゼロをテストすることができます。通常、BigDecimals
を比較するには、compareTo
を使用する必要があります。
BigDecimalは、小数点の後に10桁を指定しているため、小数点以下10桁を使用します。
最初の部分では、0と00.00000000000を比較しています(縮尺が異なるため、同じではありません)。次に、StringとBigDecimalを比較します。どちらが動作しません。