Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于精确计算的变量类型(JAVA)_Java_Math_Discrete Mathematics - Fatal编程技术网

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

用于精确计算的变量类型(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 =

对于更精确的计算,最好的类型变量是什么

我在BigDecimal中使用了double,不准确


一个常见的错误是打电话

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.