BigDecimal在乘法过程中未能设置8位数字的精度



我正在尝试以8位精度为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

最新更新