两个数字的差-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");
}

结果=模具

我还没有准备好"死亡",为什么BigDecimal一心想杀了我。

此语句:

Double x = 1.2;

最接近的double-可表示值分配给x的1.2。这只是比1.2小——值1.2本身不能用二进制精确表示。

现在,当您根据该值创建BigDecimal时,"不完全是1.2"的值将被精确保留。来自建造商的文件:

将双精度转换为BigDecimal,这是双精度二进制浮点值的精确十进制表示。

而当你使用new BigDecimal("1.2")时,结果是精确地1.2-BigDecimal解析字符串,任何十进制字符串表示都可以用BigDecimal精确地表示,因为这就是它的全部意义

1.2略大于"1.2的最接近的double表示",因此res为1。

a = new BigDecimal(x); // a= 1.1999999999999999555910790149937383830547332763671875
b = new BigDecimal(y); // b=1.2 

这是由于转换问题,因为将双精度转换为BigDecimal,这是精确的十进制表示。

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

因为1.2作为双精度并不是您所期望的。

试试这个:

BigDecimal a = new BigDecimal(String.valueOf(x));
BigDecimal b = new BigDecimal(y);

最新更新