我的 java 程序中需要的函数出现了一些问题。我想检查“双精度”变量的总位数。 (例如:5 应该返回 1,5.0034 应该返回 5,2.04 应该返回 3。)我的函数是这样的:
private int getDoubleLength (double a) {
int len = 0;
while (a != (int) a) {
a *= 10;
}
while (a > 1) {
len ++;
a/=10;
}
System.out.println(String.format("Double %f has %d digits.",a,len));
return len;
}
现在这工作得很好,但是当我进行一些数学计算时,你会得到双精度数的轻微错误:我将 10 除以 cos(60),即 0,5。答案应该是20.0,但是程序给出了20.000000000000004(那个数字,我复制的)。我的 while 循环卡住了,程序挂起。
有任何想法吗? (或者其他检查数字数字的好解决方案!)
双精度数和浮点数以及 then 的运算并不精确,因此与代数计算相比总会存在轻微的错误。如果您使用余弦等,那么您将始终必须处理这些舍入误差,任何有关数值分析的书籍或网络文本都应该描述这些误差。如果您使用简单的算术运算,请查看java.lang.BigDecimal http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html
有关如何存储浮点值的详细信息,请参阅每个计算机科学家都应该了解的浮点运算知识 http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)