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