需求
由于在代码中四叉树会对double型坐标进行递归遍历,当小数点过多的情况会导致死循环,所以需要对小数点的位数进行控制。
public static void main(String[] args) {
List<Double> aar = new ArrayList<>();
aar.add(8892.56856611);
aar.add(5553.1);
aar.add((double) 345);
aar.add(6666665562.44444444445656856611);
aar.add(6666665562.40000);
for (int i = 0; i < aar.size(); i++) {
numcut(aar.get(i));
}
}
private static void numcut(double n) {
DecimalFormat df = new DecimalFormat("#.####");// 不需要补0
// DecimalFormat df1 = new DecimalFormat("#.0000"); // 会补0
System.out.println(df.format(n));
// System.out.println(df1.format(n));
}
输出结果:
可以看到代码中的DecimalFormat传入的格式如果是0的话,会对缺掉的数据进行补全。
8892.5686
8892.5686
5553.1
5553.1000
345
345.0000
6666665562.4444
6666665562.4444
6666665562.4
6666665562.4000
后续
当转换成字符串的时候,发现一切都ok,但再将字符串转成double的时候就出现问题了。所以换了一种方法:
double n = new BigDecimal(n).setScale(4,BigDecimal .ROUND_HALF_UP).doubleValue();
总结
在写这个小功能的时候,我总觉得需要对长度进行判断再去执行DecimalFormat方法裁剪小数点,但判断的过程需要将double转换成String,然后进行小数点的判断,这样一来,在数据很多的情况下需要更多的资源消耗(未经验证)。
网友评论