用于精确计算的变量类型(JAVA)

时间:2015-12-23 18:10:06

标签: java math discrete-mathematics

更精确计算的最佳类型变量是什么?

  

我在BigDecimal中使用了double并且不准确。

2 个答案:

答案 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