BigDecimal 在乘法期间未能设置 8 位精度
BigDecimal failed to set precision of 8 digits during multiplication
我正在尝试以 8 位精度对 BigDecimal 数进行乘法运算
这是我要拍的
0.02749639
这是我的代码
double amount = 2120;
double BuyPrice = 0.00001297;
BigDecimal result=BigDecimal.valueOf(BuyPrice).multiply(BigDecimal.valueOf(amount)).setScale(8,RoundingMode.HALF_DOWN);
System.out.println(result);
这是我拿了什么
0.027496400
有人可以帮我解决吗?
0.0274964 是正确的结果。也许在代码的其他部分,由于使用 double
?
,您已经失去了精度
当您使用 BigDecimal.valueOf(double)
时,您在声明 double
时会遇到精度损失。为避免这种情况,应该使用 new BigDecimal(String)
构造函数:
BigDecimal d1 = BigDecimal.valueOf(90.000000000000001d);
BigDecimal d2 = BigDecimal.valueOf(90.000000000000002d);
System.out.println(d1.equals(d2));
BigDecimal s1 = new BigDecimal("90.000000000000001");
BigDecimal s2 = new BigDecimal("90.000000000000002");
System.out.println(s1.equals(s2));
将打印
true
false
我正在尝试以 8 位精度对 BigDecimal 数进行乘法运算
这是我要拍的
0.02749639
这是我的代码
double amount = 2120;
double BuyPrice = 0.00001297;
BigDecimal result=BigDecimal.valueOf(BuyPrice).multiply(BigDecimal.valueOf(amount)).setScale(8,RoundingMode.HALF_DOWN);
System.out.println(result);
这是我拿了什么
0.027496400
有人可以帮我解决吗?
0.0274964 是正确的结果。也许在代码的其他部分,由于使用 double
?
当您使用 BigDecimal.valueOf(double)
时,您在声明 double
时会遇到精度损失。为避免这种情况,应该使用 new BigDecimal(String)
构造函数:
BigDecimal d1 = BigDecimal.valueOf(90.000000000000001d);
BigDecimal d2 = BigDecimal.valueOf(90.000000000000002d);
System.out.println(d1.equals(d2));
BigDecimal s1 = new BigDecimal("90.000000000000001");
BigDecimal s2 = new BigDecimal("90.000000000000002");
System.out.println(s1.equals(s2));
将打印
true
false