用于精确计算的变量类型(JAVA)
对于更精确的计算,最好的类型变量是什么 我在BigDecimal中使用了double,不准确用于精确计算的变量类型(JAVA),java,math,discrete-mathematics,Java,Math,Discrete Mathematics,对于更精确的计算,最好的类型变量是什么 我在BigDecimal中使用了double,不准确 一个常见的错误是打电话 double d = .... BigDecimal bd = new BigDecimal(d); e、 g 印刷品 0.1000000000000000055511151231257827021181583404541015625 0.1 这产生了双精度的精确表示,而这往往不是预期的结果。相反,你应该使用 double d = .... BigDecimal bd =
一个常见的错误是打电话
double d = ....
BigDecimal bd = new BigDecimal(d);
e、 g
印刷品
0.1000000000000000055511151231257827021181583404541015625
0.1
这产生了双精度的精确表示,而这往往不是预期的结果。相反,你应该使用
double d = ....
BigDecimal bd = BigDecimal.valueOf(d);
因为这会为最短的十进制值生成BigDecimal,即双精度
BigDecimal bd = BigDecimal.valueOf(0.1);
System.out.println(bd);
印刷品
0.1000000000000000055511151231257827021181583404541015625
0.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);
给出:
1/3=0。bigdecimic具有任意精度。定义“不准确”可能的副本是一个常见的误解,你需要<代码> BigDecimal <代码>,或者我将解决所有的问题,你用代码>双< /代码> IMHO使用<代码> BigDecimal <代码>只是在很多情况下使查找错误更难,也更慢。1谢谢。我说了一些“精确”+1.