2011-06-22 241 views
13

这里是小代码来说明我所看到的DecimalFormat的四舍五入

float floater = 59.999f; 

DecimalFormat df = new DecimalFormat("00.0"); 

System.out.println(df.format(floater)); 

此打印:

60.0 

我想它打印

59.9 

我需要做什么来做?

+0

请查看'Math.round'。 –

回答

21

使用DecimalFormat之前添加此行:

df.setRoundingMode(RoundingMode.DOWN); 

看看其他舍入模式,看看哪一个最适合你。

注意:此方法仅适用于JDK 1.6或更高版本

+0

[DecimalFormat.setRoundingMode(java.math.RoundingMode)](http://docs.oracle.com/javase/7 /docs/api/java/text/DecimalFormat.html#setRoundingMode(java.math.RoundingMode)) – Julien

1
float d = 59.999f; 
BigDecimal bd = new BigDecimal(d); 
// Use the returned value from setScale, as it doesn't modify the caller. 
bd = bd.setScale(1, BigDecimal.ROUND_FLOOR); 
String formatted = bd.toString(); 
+0

通常这是不好的决定,因为它会改变数据,而我们需要更改视图 –

+1

@ om-nom-nom:我宁愿说这太糟糕了。并且需要创建一个BigDecimal。但至于它如何“改变数据” - 我没有看到......原始的浮动块是未触及过的,可供任何东西使用。你会详细说明你的评论吗? – ppeterka

+0

@ppeterka公平点。这比一年前少了一点,可能我是从这个角度思考的,我怎么轮到我的bigdecimal *的观点,现在不能说 –