我正在尝试将BigDecimal数字与8位数的精度相乘
这是我想要的
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 :(得分:4)
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