如何格式化具有可变小数位数的double

时间:2013-06-25 11:56:53

标签: java number-formatting

我正在处理一项任务,我遇到了处理下面提到的负面情况

如果Value小于1,那么我想格式化(添加)4个小数点。

例如,如果值为0.4567,那么我需要0.4567

否则,如果该值大于1格式且只有2位数。

例如,如果值为444.9,那么我需要444.90

上面提到的所有内容都运行良好,但是在下面这个条件下发现了

即如果该值小于1并且它以零(0.1000,0.6000)结束,则打印0.2000是没有意义的,所以在这种情况下我希望输出仅为0.20

这是我的程序

package com;
import java.text.DecimalFormat;
public class Test {
    public static void main(String args[]) {
        try {
            String result = "";
            Test test = new Test();
            double value = 444.9;
            if (value < 1) {
                result = test.numberFormat(value, 4);
            } else {
                result = test.numberFormat(value, 2);
            }
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public String numberFormat(double d, int decimals) {
        if (2 == decimals)
            return new DecimalFormat("#,###,###,##0.00").format(d);
        else if (0 == decimals)
            return new DecimalFormat("#,###,###,##0").format(d);
        else if (3 == decimals)
            return new DecimalFormat("#,###,###,##0.000").format(d);
        else if (4 == decimals)
            return new DecimalFormat("#,###,###,##0.0000").format(d);
        return String.valueOf(d);
    }

}

2 个答案:

答案 0 :(得分:6)

如果你想在第3和第4个小数位忽略0,请使用#

new DecimalFormat("#,###,###,##0.00##").format(d)

答案 1 :(得分:0)

只需创建一个包含四位数的字符串并检查尾随零。如果有两个零或更少,删除它们。否则,保持原样。

result = test.numberFormat(value, 4);
if (result.endsWith("00")) {
  result=result.substring(0, result.length()-2);
} else if (result.endsWith("0")) {
  result=result.substring(0, result.length()-1);
}

它可能不是最佳的,但它易于阅读和维护。