如何防止
String.format("%.2f", doubleValue);
四舍五入(四舍五入算法)而不是仅仅截断它?
例如
doubleValue = 123.459
格式化后,
doubleValue = 123.46
我只想丢弃最后一位数字,
123.45
我知道还有其他方法可以做到这一点,我只是想知道使用 String.format 是否可以实现这一点。
您可以随时设置舍入模式:
http://java.sun.com/javase/6/docs/api/java/math/RoundingMode.html
然后使用 String.Format() 默认使用 HALF_EVEN,但您可以将其更改为 CEILING
另一种不那么灵活的方法是(但这不是你问的):
DecimalFormat df = new DecimalFormat("###.##");
df.format(123.459);
看起来答案是否定的。 http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec “那么该值将使用四舍五入算法进行四舍五入”
我觉得他们这样做很奇怪,因为 NumberFormatter 允许您设置 RoundingMode。 但正如你所说,还有其他方法可以做到这一点。 显然最简单的方法是先从您的值中减去 0.005。
doubleValue = 123.459
doubleValue = Math.ceil(doubleValue*100)/100;
试试这个。
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(123.459));
输出:
123.45
java.math.RoundingMode.DOWN
舍入模式向零舍入。切勿在丢弃的分数(即截断)之前增加数字。请注意,此舍入模式永远不会增加计算值的大小。此模式对应于 IEEE 754-2019 舍入方向属性 roundTowardZero。
我的解决方案:
示例:
浮点 f = 99.99998;
会变成100.0(格式为“%.1f”)
** 第一:
f = (int)(99.99998f * 10)
** 第二:
f /= 10f;
它将是:99.9(格式为“%.1f”)
使用 String.format("%.2f", doubleValue - .005)