我读过这个问题,将小数点后两位舍入到两位。它展示了如何对数字进行舍入。我想要的只是简单的格式,只打印小数点后两位。我所拥有的和我所尝试的:
double res = 24.695999999999998;
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(res)); //prints 24.70 and I want 24.69
System.out.println("Total: " + String.format( "%.2f", res )); //prints 24.70
因此,当我有24.695999999999998时,我想将其格式化为24.69
您需要首先获取双值的floor
,然后对其进行格式化。
数学楼层(双人)
返回小于或等于参数且等于数学整数的最大(最接近正无穷大)双精度值。
所以使用类似的东西
double v = Math.floor(res * 100) / 100.0;
其他备选方案包括使用BigDecimal
。
public void test() {
double d = 0.29;
System.out.println("d=" + d);
System.out.println("floor(d*100)/100=" + Math.floor(d * 100) / 100);
System.out.println("BigDecimal d=" + BigDecimal.valueOf(d).movePointRight(2).round(MathContext.UNLIMITED).movePointLeft(2));
}
打印
d=0.29
floor(d*100)/100=0.28
BigDecimal d=0.29
将数字乘以100并强制转换为整数。这会截断除所需的两个之外的所有十进制空格。将结果除以100.00。(24.69).
int temp = (int)(res * 100);
double result = temp / 100.00;
或者一行代码中的相同内容:
double result = ((int)(res * 100)) / 100.00;
除了使用Math.floor(double)
和计算小数位数(例如,两个小数点的* 100
和/ 100.0
)外,您还可以使用BigDecimal
,然后像一样调用setScale(int, int)
double res = 24.695999999999998;
BigDecimal bd = BigDecimal.valueOf(res);
bd = bd.setScale(2, RoundingMode.DOWN);
System.out.println("Value: " + bd);
这也会给你(要求的)
Value: 24.69