2013-10-28 21 views
0

我试图格式化amount.But十进制值没有被正确的方式舍入。 DecimalFormat是否在循环时不考虑小数值?

public class Testing {  
    private java.text.DecimalFormat dispAmt;  
    public Testing() {     
    }  
    public static void main(String args[]){ 
     Testing testing=new Testing();  
     testing.dispAmt = new java.text.DecimalFormat("##,##,##0.00"); 
     // Line #8 
     System.out.println(testing.dispAmt.format(1974.545));  
     System.out.println(testing.dispAmt.format(1974.535)); 
    } 
}  

OutPut: 
========= 
1,974.54  
1,974.54 


在上面前卫有什么错8号线。为什么它不是“1,974.55”?我在哪里犯错误!请建议..

回答

0

您需要通过将其设定使用setRoundingMode()方法,因为默认情况下,设置RoundingMode的格式,它不圆价值。

dispAmt.setRoundingMode(RoundingMode.CEILING); // Ex 1 
dispAmt.setRoundingMode(RoundingMode.HALF_UP); // Ex 2 but I guess you need this in your case 

有很多RoundingMode可用。请检查文档。

+0

他可能希望'RoundingMode.HALF_UP' –

+0

好,我已经在答案中链接了文档。 OP可以看看他们并选择适合他的人。够公平吧?! – SudoRahul

2

默认DecimalFormat使用的HALF_EVENwhich

表现为用于RoundingMode.HALF_UP如果数字到舍弃部分的左侧是奇数舍入模式;表现为RoundingMode.HALF_DOWN,如果它是平坦的。

在这种情况下,倒数第二个至少显著位的1974.5454是即使这样的值向下取整。相反,3的价值很奇怪,因此在随后的format声明中发生了整数。

尝试使用RoundingMode.HALF_UP

testing.dispAmt.setRoundingMode(RoundingMode.HALF_UP); 
0

DecimalFormat是NumberFormat的一个具体子类,用于格式化十进制数。这并没有给出数字。 INFO 这只是使用你给出的模式来显示数字。

DecimalFormat提供了用于格式化的RoundingMode中定义的舍入模式。默认情况下,它使用RoundingMode.HALF_EVEN。

+0

链接很有用,但文档相当长。我们可以在文档中找到这个指针吗? –

+0

阅读第一段,它只提及格式。我编辑答案DecimalFormat支持舍入看看。 –