求高手解答:DecimalFormat四舍五入问题。

我需要将一个数字格式化为###.0000格式,比如1.2,格式化为1.2000 
12.00005,我希望得到12.0001
很遗憾我现在没有找到好的办法可以达到我的目的。
下面为我的测试代码。
求大神给个方法,最好也能解释下java.text.DecimalFormat的机制。

public class FormatTest {

    public static void main(String[] args) {
        java.text.DecimalFormat df = new java.text.DecimalFormat("###.0000");
        java.lang.Double db1 = new java.lang.Double("12.00005");
        java.lang.Double db2 = new java.lang.Double("12.00006");
        java.lang.Double db3 = new java.lang.Double("12.000055");
        java.lang.Double db4 = new java.lang.Double("12.000056");

        System.out.println(df.format(db1)); // 输出结果是12.0000
        System.out.println(df.format(db2)); // 输出结果是12.0001
        System.out.println(df.format(db3)); // 输出结果是12.0001
        System.out.println(df.format(db4)); // 输出结果是12.0001

    }
}


米脂
浏览 1545回答 3
3回答

SMILET

 double d = 3.1465926;    String result = String.format("%.4f", d);  System.out.println(result);可以使用这个试试!

aluckdog

楼主代码没错,而运行结果不是楼主所想的原因:是因为java标准是美国人制定的,而美国人常用运算思维是上述结果,不同于我们中国人的思维是四舍五入,所以java默认的格式是HALF_EVEN,这是美国人的思维。想要得到楼主想要的结果,只要加一行代码就行了。具体代码如下:import java.text.DecimalFormat;import java.math.RoundingMode;public class Test1{public static void main(String args[]){    DecimalFormat df = new DecimalFormat("###.0000");     df.setRoundingMode(RoundingMode.HALF_UP);     double db1 = 12.00005;     double db2 = 12.00006;     double db3 = 12.000055;     double db4 = 12.000056;     System.out.println(df.format(db1)); // 输出结果是12.0001     System.out.println(df.format(db2)); // 输出结果是12.0001     System.out.println(df.format(db3)); // 输出结果是12.0001     System.out.println(df.format(db4)); // 输出结果是12.0001 }}这样就正确了 。java.math 枚举 RoundingModejava.lang.Object继承者 java.lang.Enum继承者 java.math.RoundingModejava.text 类 DecimalFormatjava.lang.Object继承者 java.text.Format继承者 java.text.NumberFormat继承者 java.text.DecimalFormat不同舍入模式下的舍入操作汇总 根据给定的舍入模式将输入数字舍入为一位数的结果 输入数字 UP DOWN CEILING FLOOR HALF_UP HALF_DOWN HALF_EVEN UNNECESSARY 5.5 6 5 6 5 6 5 6 抛出 ArithmeticException 2.5 3 2 3 2 3 2 2 抛出 ArithmeticException 1.6 2 1 2 1 2 2 2 抛出 ArithmeticException 1.1 2 1 2 1 1 1 1 抛出 ArithmeticException 1.0 1 1 1 1 1 1 1 1 -1.0 -1 -1 -1 -1 -1 -1 -1 -1 -1.1 -2 -1 -1 -2 -1 -1 -1 抛出 ArithmeticException -1.6 -2 -1 -1 -2 -2 -2 -2 抛出 ArithmeticException -2.5 -3 -2 -2 -3 -3 -2 -2 抛出 ArithmeticException -5.5 -6 -5 -5 -6 -6 -5 -6 抛出 ArithmeticException至于详细的帮助,建议楼主下载一份java API文档学习。希望对楼主有帮助

一只斗牛犬

df.setRoundingMode(RoundingMode.HALF_UP);加上这句代码试试看试试看
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java