【发布时间】:2011-05-13 14:07:06
【问题描述】:
我的 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 循环卡住了,程序挂起。
有什么想法吗? (或其他检查数字位数的绝佳解决方案!)
【问题讨论】:
-
双精度不能超过 17 位,所以当你达到 17 时你应该停止。你遇到的另一个问题是双精度可能超过 Integer.MAX_VALUE 这将导致你的第一个循环无限迭代。
标签: java floating-point count double digits