使用DecimalFormat时,如何防止小数被舍入?

时间:2011-07-27 09:13:59

标签: java

任何人都可以帮助我如何防止舍入十进制值。

DecimalFormat df = new DecimalFormat();

Object[] arrayRowResult = (Object[]) rowResult;
String a=df.format(arrayRowResult[0]) // [0] contain decimal(2,10) but format results rounded value
String b=df.format(arrayRowResult[1]) // [1] contain decimal(2,14) but format results rounded value

我如何防止四舍五入。

5 个答案:

答案 0 :(得分:3)

DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(0);
df.setMaximumFractionDigits(2);
// .... your code

这仍将对具有两位以上数字的数字进行舍入 - 根据需要更改该值。

答案 1 :(得分:1)

您是否尝试过关注?

DecimalFormat df = new DecimalFormat("#.##");

答案 2 :(得分:0)

答案 3 :(得分:0)

package com.mkyong.test;

import java.math.RoundingMode;
import java.text.DecimalFormat;

public class TestDouble {

    private static DecimalFormat df2 = new DecimalFormat(".##");

    public static void main(String[] args) {

        double input = 32.123456;
        System.out.println("double : " + input);
        System.out.println("double (default) : " + df2.format(input));

        df2.setRoundingMode(RoundingMode.UP);
        System.out.println("double (UP) : " + df2.format(input));

        df2.setRoundingMode(RoundingMode.DOWN);
        System.out.println("double (DOWN) : " + df2.format(input));

    }

}

复制 输出

double : 32.123456
double (default) : 32.12
double (UP) : 32.13
double (DOWN) : 32.12

答案 4 :(得分:0)

您需要添加 df.setRoundingMode(RoundingMode.DOWN);

    double a = 980.199999;
    
    DecimalFormat df = new DecimalFormat("#,##0.00");
    df.setRoundingMode(RoundingMode.DOWN);
    String as = df.format(a);
    System.out.println(as);

如果不需要,甚至可以为整数加2个小数点

输出: 980.19