截断双数

Truncating double numbers

我正在使用 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));

你可以做类似

double cutValue = Math.floor(a * 100.0) / 100.0;

你可以试试下面的代码吗?

DecimalFormat format = new DecimalFormat("#.##");
format.setRoundingMode(RoundingMode.FLOOR);
System.out.println (format.format(ttAve));

你可以使用这个方法:

float roundResult (float f) {
   int precise = 100;
   f = f * precise;
   int i = (int) f;
   return (float) i / precise;
}