java:比使用if和else更好的方法

Paw*_*wan 0 java

我有一个要求取决于地图的特定键值,我需要格式化输出.

例如,如果其大于1值,那么所需要的值(12.23),或者之后,以仅显示2小数点如果其值小于1,我需要后它显示4个小数点.

我写的代码它工作正常,但我正在寻找这样做的更好的办法(基本上我不喜欢,如果在我的代码其他条件)

这是我的程序,取决于我格式化输出的最后一个属性键值

package com;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class CustValues {

    public static void main(String args[]) {

        Map valuesMap = new HashMap();

        valuesMap.put("mktCap", "12.4d");
        valuesMap.put("last", "0.4344");
        valuesMap.put("avgvalue", "34.55");
        valuesMap.put("bidprice", "44.44");

        Iterator<String> iterator = valuesMap.keySet().iterator();

        while (iterator.hasNext()) {
            String name = iterator.next().toString();

            String value = (String) valuesMap.get(name);

            if (name.equals("last")) {

                String result = "";

                double d = Double.parseDouble(value);

                if (d > 1) {
                    result = formatNumber(value, 2);
                } else {
                    result = formatNumber(value, 4);
                }

                System.out.println(result);
            }

        }

    }

    public static String formatNumber(String s, int decPts) {
        double d = Double.parseDouble(s);

        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);

    }

}
Run Code Online (Sandbox Code Playgroud)

Cod*_*ice 5

你可以创建一个Map<Integer, DecimalFormat> formats(或者List<DecimalFormat>,如果你愿意的话).然后formatNumber()只需调用formats.get(decPts)以获得正确的格式.