两个数字的差异 - BigDecimal

S J*_*esh 1 java bigdecimal

我只是想了解更多有关BigDecimal的信息,但是下面的代码让我感到困惑.

Double x = 1.2;
String y = "1.2";

BigDecimal a = BigDecimal.ZERO;
BigDecimal b = BigDecimal.ZERO;

a = new BigDecimal(x);
b = new BigDecimal(y);

int res = res = b.compareTo(a);

if(res==1){
    System.out.println("Die");
}else if(res ==0){
    System.out.println("Live");
}else if (res==-1){
    System.out.println("God Loves you");
}
Run Code Online (Sandbox Code Playgroud)

结果=死亡

我还没有准备好" ",为什么BigDecimal一心想要杀了我.

Jon*_*eet 10

这个说法:

Double x = 1.2;
Run Code Online (Sandbox Code Playgroud)

最近的可double表示值分配给1.2 x.这只是小于 1.2 - 值1.2本身不能用二进制表示.

现在,当您BigDecimal从该值创建一个时,将保留"不完全1.2"的值.从构造函数的文档:

将double转换为BigDecimal,它是double的二进制浮点值的精确十进制表示形式.

...而当你使用new BigDecimal("1.2")结果时,正好是 1.2 - BigDecimal解析字符串,任何十进制字符串表示可以完全表示BigDecimal,因为这是它的全部要点.

1.2比"最近double的1.2表示"略大,因此res为1.

  • @SJagdeesh:在将"double"转换为"BigDecimal"*之前,你应该仔细考虑.这很少是一个好主意.你的用例是什么?通常这种事情表明你应该在之前使用`BigDecimal`,并完全避免使用`double`. (3认同)
  • +1或使用`BigDecimal.valueOf(double)`来使用double打印的值. (2认同)