截断双数
Truncating double numbers
我正在使用 java 程序计算最早截止日期算法。除了双数之外,一切似乎都正常。当我计算平均值(周转时间和等待时间)时,通常答案是这样的:
18.566666666666663
我想将答案截断(不四舍五入)到小数点后两位,所以答案应该是:
18.56
好的,所以我尝试在控制台屏幕上打印结果:
System.out.println (String.format ("%.2f", ttAve)); // ttAve contains 18.566666666666663
但是,打印时数字将四舍五入:
18.57
我该怎么办?
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(18.566666666666663));
请注意,System.out.printf
和 DecimalFormat
都使用系统默认区域设置进行格式化,因此在某些国家/地区,您可能会意外地看到 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;
}
我正在使用 java 程序计算最早截止日期算法。除了双数之外,一切似乎都正常。当我计算平均值(周转时间和等待时间)时,通常答案是这样的:
18.566666666666663
我想将答案截断(不四舍五入)到小数点后两位,所以答案应该是:
18.56
好的,所以我尝试在控制台屏幕上打印结果:
System.out.println (String.format ("%.2f", ttAve)); // ttAve contains 18.566666666666663
但是,打印时数字将四舍五入:
18.57
我该怎么办?
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(18.566666666666663));
请注意,System.out.printf
和 DecimalFormat
都使用系统默认区域设置进行格式化,因此在某些国家/地区,您可能会意外地看到 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;
}