防止在Java中以String.format(“%.2f”,doubleValue)进行舍入
如何防止防止在Java中以String.format(“%.2f”,doubleValue)进行舍入,java,string,floating-point,format,Java,String,Floating Point,Format,如何防止String.format(“%.2f”,doubleValue)从四舍五入(向上取整算法)而不是仅仅截断它 e、 g 格式化后 doubleValue = 123.46 我只想丢弃最后一个数字 123.45 我知道还有其他方法可以做到这一点,我只想知道使用String.format是否可以做到这一点。您始终可以设置舍入模式: doubleValue = 123.459 doubleValue = Math.ceil(doubleValue*100)/100; 然后使用Strin
String.format(“%.2f”,doubleValue)代码>从四舍五入(向上取整算法)而不是仅仅截断它
e、 g
格式化后
doubleValue = 123.46
我只想丢弃最后一个数字
123.45
我知道还有其他方法可以做到这一点,我只想知道使用String.format是否可以做到这一点。您始终可以设置舍入模式:
doubleValue = 123.459
doubleValue = Math.ceil(doubleValue*100)/100;
然后使用String.Format()
默认情况下,甚至会使用HALF_,但您可以将其更改为天花板
另一个没有那么灵活的方法是(但这不是你所问的):
看来答案是一个大大的否定。
“然后将使用向上取整算法对值进行取整”
我觉得他们这样做很奇怪,因为NumberFormatter允许您设置RoundingMode。但正如你所说,还有其他的方法。显然最简单的方法是先从值中减去.005。使用String.format(“%.2f”,doubleValue-.005)如果要截断,是否要使用floor
表示正值,使用ceil
表示负值?如果小数点左侧的数字可以超过3位,该怎么办?另外,是否可以直接在将其转换为字符串的双变量上使用它,而不是创建新对象?将来引用这是错误的。如果小数位数小于6,则使用向上舍入的一半,使用其他明智的半舍五入偶数舍入。我觉得这很荒谬!我已经阅读了javadocs并做了一些研究,但还没有找到一种方法来更改String.format()函数中的RoundingMode。有人能进一步解释吗?这应该是公认的答案@DimitryK的回答意味着您可以让String.format()截断而不是取整,这是不正确的。请注意这种方法String.format(“%.2f”,1.05-.005)
导致1.04
,可能是由于浮点不准确。
doubleValue = 123.459
doubleValue = Math.ceil(doubleValue*100)/100;
DecimalFormat df = new DecimalFormat("###.##");
df.format(123.459);