我想管理的数字范围从:
从0,001
到999,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/