0

我的要求是,如果最后一个变量 值小于 1,例如 0.0045

然后我需要在小数点后打印 4 位数字,以便结果看起来像0.0045

否则,如果最后一个变量值大于 1,例如 444.8183

然后我只需要在小数点后打印 2 位数字,这样结果就会像444.82

我已经编写了程序,它运行良好,但我喜欢使用三元运算符

public class Test {

    private static NumberUtil numberUtil = NumberUtil.getInstance();

    public static void main(String args[]) {
        float last = (float) 444.8183;
        String result = "";

        if (last > 1) {
                result = numberUtil.formatNumber(last, 2);
        } else {
            result = numberUtil.formatNumber(last, 4);
        }
        System.out.println(result);
    }
}

import java.text.DecimalFormat;

public class NumberUtil {

    private static NumberUtil _instance = new NumberUtil();

    public static NumberUtil getInstance() {
        return _instance;
    }

    public String formatNumber(double d, int decPts) {
        if (2 == decPts)
            return new DecimalFormat("#,###,###,##0.00").format(d);
        else if (0 == decPts)
            return new DecimalFormat("#,###,###,##0").format(d);
        else if (3 == decPts)
            return new DecimalFormat("#,###,###,##0.000").format(d);
        else if (4 == decPts)
            return new DecimalFormat("0.0000").format(d);
        return String.valueOf(d);
    }

    public double formatDoubleNumber(double d){
        double newD = Math.round(d*100.0)/100.0;
        return newD;
    }
}
4

5 回答 5

8

怎么样

sigFigs = (last > 1)? 2 : 4;
result = numberUtil.formatNumber(last, sigFigs);

像这样拆分它的好处是代码变得“自我记录”。下周你仍会记得你为什么要这么做。

于 2013-06-10T03:51:19.497 回答
3

为了使其更具可读性,请将三元组放在调用中:

String result = numberUtil.formatNumber(last, last > 1 ? 2 : 4);

这里重要的是您将三元的影响缩小到最小范围,符合“最小化范围”。

请注意,您不需要在测试周围使用括号(代码越少越好!)。

于 2013-06-10T03:53:15.207 回答
2

就是这样:

result = (last > 1) 
    ? numberUtil.formatNumber(last, 2) 
    : numberUtil.formatNumber(last, 4);

顺便说一句,它实际上被称为“条件运算符”。它恰好是“一个”三元运算符(三元意味着它需要三个操作数)。

于 2013-06-10T03:50:10.517 回答
0

我不喜欢三元运算符,但给你

result =  (last > 1)? numberUtil.formatNumber(last, 2) : numberUtil.formatNumber(last, 4);
于 2013-06-10T03:50:46.650 回答
0

result = numberUtil.formatNumber(last, (last > 1) ? 2 : 4);

于 2013-06-10T03:51:27.807 回答