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

set*_*ora 11 java string format floating-point

如何防止String.format("%.2f", doubleValue);四舍五入(圆半算法)而不是截断它?

例如

doubleValue = 123.459
Run Code Online (Sandbox Code Playgroud)

格式化后,

doubleValue = 123.46
Run Code Online (Sandbox Code Playgroud)

我只想丢弃最后一位数,

123.45
Run Code Online (Sandbox Code Playgroud)

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

Dmi*_*ryK 16

您始终可以设置舍入模式:

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);
Run Code Online (Sandbox Code Playgroud)

  • 我已阅读 javadocs 并做了一些研究,但尚未找到更改 String.format() 函数中的 RoundingMode 的方法。有人可以进一步解释一下吗? (4认同)

and*_*bd1 8

看起来答案是一个很大的脂肪NO. http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec "然后使用圆半升算法对值进行舍入"

我发现他们这样做很奇怪,因为NumberFormatter允许你设置RoundingMode.但正如你所说,还有其他方法可以做到这一点.显然最容易从您的值中减去.005.