我试图格式化数量。但是十进制值没有以正确的方式舍入。
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 :(得分:2)
默认情况下,DecimalFormat
使用HALF_EVEN
which
如果丢弃的分数左边的数字是奇数,则的行为与RoundingMode.HALF_UP相同;如果它是偶数,则表现为RoundingMode.HALF_DOWN。
在这种情况下,4
的{{1}}的第二个最低有效数字甚至是向下舍入的值。相反,1974.545
的值是奇数,因此在随后的3
语句中出现了舍入。
尝试使用format
。
RoundingMode.HALF_UP
答案 1 :(得分:1)
DecimalFormat#format没有舍入!它只是切断了默认情况下不显示的值。
DecimalFormat使用半偶数舍入(请参阅ROUND_HALF_EVEN)进行格式设置。
http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html
您必须手动设置RoundingMode
dispAmt.setRoundingMode(RoundingMode.HALF_UP);
答案 2 :(得分:0)
您需要使用RoundingMode方法设置格式化程序的setRoundingMode(),因为默认情况下,它不会对值进行舍入。
dispAmt.setRoundingMode(RoundingMode.CEILING); // Ex 1
dispAmt.setRoundingMode(RoundingMode.HALF_UP); // Ex 2 but I guess you need this in your case
有许多RoundingMode
可用。请检查文档。
答案 3 :(得分:0)
DecimalFormat是NumberFormat的具体子类,用于格式化十进制数。这并没有围绕给定的数字。 INFO 这只是使用您给出的模式来显示数字。
DecimalFormat提供RoundingMode中定义的舍入模式以进行格式化。默认情况下,它使用RoundingMode.HALF_EVEN。