Java 中的 String.format("%.2f", doubleValue) 防止四舍五入

问题描述 投票:0回答:6

如何防止

String.format("%.2f", doubleValue);
四舍五入(四舍五入算法)而不是仅仅截断它?

例如

doubleValue = 123.459

格式化后,

doubleValue = 123.46

我只想丢弃最后一位数字,

123.45

我知道还有其他方法可以做到这一点,我只是想知道使用 String.format 是否可以实现这一点。

java string floating-point format
6个回答
18
投票

您可以随时设置舍入模式:

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);

9
投票

看起来答案是否定的。 http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec “那么该值将使用四舍五入算法进行四舍五入”

我觉得他们这样做很奇怪,因为 NumberFormatter 允许您设置 RoundingMode。 但正如你所说,还有其他方法可以做到这一点。 显然最简单的方法是先从您的值中减去 0.005。


4
投票
doubleValue = 123.459
doubleValue = Math.ceil(doubleValue*100)/100;

0
投票

试试这个。

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。


0
投票

我的解决方案:

示例:

浮点 f = 99.99998;

会变成100.0(格式为“%.1f”)

** 第一:

f = (int)(99.99998f * 10)

** 第二:

f /= 10f;

它将是:99.9(格式为“%.1f”)


-4
投票

使用 String.format("%.2f", doubleValue - .005)

© www.soinside.com 2019 - 2024. All rights reserved.