我想管理的数字范围从:
0,001999,999
出于表示的原因,我想降低一些精度,只保留数字的3个最重要的数字。
对于123,12这个数,我希望得到123的结果。
对于12,123这个数,我希望得到12,1的结果。
对于0,001这个数,我希望得到结果0,001
我想到的最佳解决方案是将数字转换为字符串,然后再转换为双精度,这样:

 number = number*1000;
 String s = new String(number);
 s = s.substr(0, 3) + "000";
 number = Double.parseDouble(s);
 number = number/1000;

这样做的工作,但它看起来既表现不佳,也不优雅。
还有更聪明的选择吗?
谢谢您!

最佳答案

这里有一个有点复杂的答案,不需要使用任何到String的转换:

final int numDigits = 3;

double d = 12.123;

int counter;

for (counter = 0; counter < numDigits && d < Math.pow(10, numDigits - 1); counter++) {
    d *= 10;
}

d = Math.floor(d);

d /= Math.pow(10, counter);

System.out.println(d);

输出:12.1
本质上,它将cc乘以10,直到它达到1000以下的最大值(最大值是999.999),跟踪它乘以了多少次。然后,它执行double函数以去除小数点右边的任何精度最后,我们将数字除以10,floor次,得到前3个有效数字。

关于java - 限制 double 的执行方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48870610/

10-13 03:53