格式化双精度而不是四舍五入

我需要格式化(而不是舍入)一个double到2位小数。

我尝试过:

 String s1 = "10.126"; Double f1 = Double.parseDouble(s1); DecimalFormat df = new DecimalFormat(".00"); System.out.println("f1"+df.format(f1)); 

结果:

 10.13 

但我要求输出为10.12

调用setRoundingMode以适当地设置RoundingMode

 String s1 = "10.126"; Double f1 = Double.parseDouble(s1); DecimalFormat df = new DecimalFormat(".00"); df.setRoundingMode(RoundingMode.DOWN); // Note this extra step System.out.println(df.format(f1)); 

产量

 10.12 

您可以将格式化程序的舍入模式设置为DOWN

 df.setRoundingMode(RoundingMode.DOWN); 

为什么不使用BigDecimal

 BigDecimal a = new BigDecimal("10.126"); BigDecimal floored = a.setScale(2, BigDecimal.ROUND_DOWN); // == 10.12 

你试过RoundingMode.FLOOR吗?

 String s1 = "10.126"; Double f1 = Double.parseDouble(s1); DecimalFormat df = new DecimalFormat(".00"); df.setRoundingMode(RoundingMode.FLOOR); System.out.println("f1"+df.format(f1)); 

如果您要做的只是在两个小数位上截断一个字符串,请考虑使用String函数,如下所示:

 String s1 = "10.1234"; String formatted = s1; int numDecimalPlaces = 2; int i = s1.indexOf('.'); if (i != -1 && s1.length() > i + numDecimalPlaces) { formatted = s1.substring(0, i + numDecimalPlaces + 1); } System.out.println("f1" + formatted); 

这节省了解析为Double,然后格式化为String。