java - 截断双数

标签 java numbers rounding number-formatting

我正在使用一个计算最早截止日期算法的java程序。除了双数之外,一切似乎都工作正常。当我计算平均值(周转时间和等待时间)时,通常答案是这样的:

18.566666666666663

我想将答案截取(而不是四舍五入)到小数点后两位,所以答案应该是:

18.56

好的,所以我尝试在控制台屏幕上打印结果:

System.out.println (String.format ("%.2f", ttAve)); // ttAve contains 18.566666666666663

但是,打印时数字将被四舍五入:

18.57

我应该做什么?

最佳答案

使用DecimalFormat :

DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(18.566666666666663));

请注意,System.out.printfDecimalFormat 都使用系统默认区域设置进行格式化,因此您可能会意外看到 18,56在某些国家/地区而不是 18.56。如果不希望出现这种情况,您可以显式指定区域设置:

DecimalFormat df = new DecimalFormat("#.##", 
                                     DecimalFormatSymbols.getInstance(Locale.ENGLISH));
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(18.566666666666663));

关于java - 截断双数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35447644/

相关文章:

java - 使用 Java 8 流查找映射中的最小键

java - 分割该字符串以获得相应字符的最大计数

javascript - Javascript 数字如何存储在内存中

mysql - 如何将数字四舍五入到最接近的 10?

c# - 在 C# 中对小数进行四舍五入并转换为 %

java - 如何使变量在Java中随处可用而无需参数

java - 如何在 Java 中为 ReferenceQueue.remove() 指定正确的类型?

c - C 程序在查找整数三元组 (x,y,z) 时出错,使得 n^x + n^y = n^z 对于给定的 n 范围

c++ - 减少程序的内存使用

java - 即使显式设置,DecimalFormat 使用不正确的 RoundingMode