执行限制双精度的方法

时间:2018-02-19 16:47:53

标签: java algorithm

我希望在以下范围内管理号码:

0,001999,999

对于表示原因,我想删除一些准确性,只保留该数字的3个最重要的数字。

对于数字123,12,我希望结果为123

对于数字12,123,我希望结果为12,1

对于数字0,001,我希望结果为0,001

我想到的最好的解决方案是将数字转换为字符串,然后以这种方式再次转换为double:

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

这可以完成这项工作,但它看起来既表现不佳又不优雅。 还有更聪明的选择吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

这是一个有点复杂的答案,不需要使用任何转换为​​2

select * from [sheet_Name$] where rowid=2

输出:datagridview

基本上它将String乘以10,直到达到1000以下的最大值(最大值为999.999),跟踪它乘以的次数。然后执行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); 函数以消除小数点右侧的任何精度。最后,我们将数字除以10 12.1次,这为我们提供了前3个有效数字。

答案 1 :(得分:1)

也许使用this RegEx使代码更简洁?

^[,0]{0,6}(\d{3}|\d{2},\d|\d,\d{2})