簡體   English   中英

Java:如何為此目的使用三元運算符

[英]Java : How to use ternary operator for this purpose

我的要求是,如果最后一個變量值小於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;
    }
}

怎么樣

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

像這樣將其拆分的好處是代碼變為“自我記錄”。 下周,您仍然會記得為什么要這么做。

這是如何做:

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

順便說一句,它實際上被稱為“條件運算符”。 它恰好是“ a”三元運算符(三元表示它需要三個操作數)。

為了使其更具可讀性,請將三元數放入調用中:

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

重要的是,您要根據“最小范圍”將三元的作用范圍縮小到最小范圍。

請注意,您不需要在測試周圍使用方括號(並且代碼更少是好的!)。

我不喜歡三元運算符,但是你去了

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM