格式化双精度而不是四舍五入
我需要格式化(而不是舍入)一个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。