更精确计算的最佳类型变量是什么?
我在BigDecimal中使用了double并且不准确。
答案 0 :(得分:2)
常见的错误是打电话
double d = ....
BigDecimal bd = new BigDecimal(d);
e.g。
BigDecimal bd = new BigDecimal(0.1);
System.out.println(bd);
打印
0.1000000000000000055511151231257827021181583404541015625
这会产生双精度的精确表示,这通常不是预期的。相反,你应该使用
double d = ....
BigDecimal bd = BigDecimal.valueOf(d);
因为这会生成最小十进制值的BigDecimal,这将是double
BigDecimal bd = BigDecimal.valueOf(0.1);
System.out.println(bd);
打印
0.1
答案 1 :(得分:1)
如果准确,则表示精确度:
精度不能无限(或者您应该使用其他符号表示)。
使用某些功能时:
1你必须定义精度(可能非常大)。
2你也必须考虑舍入模式。
在许多情况下,如果您重复使用值进行进一步计算,则数学库无法预测精度结果。所以你必须跟踪精度。
1/3和100小数的示例:
// 1/3
BigDecimal one=new BigDecimal(1);
BigDecimal three=new BigDecimal(3);
BigDecimal one_third=one.divide(three,100,RoundingMode.HALF_DOWN); // third parameter is round mode
System.out.println("1/3="+one_third);
给出:
三分之一= 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333