在这种情况下如何消除指数结果

时间:2013-06-25 12:35:25

标签: java

如果值是这样的(0.0007)以十进制后的3个零结束,我得到的结果为4.0E-4

请告诉我如何解决这个问题

这是我的计划。

package com;
import java.text.DecimalFormat;
public class Test {
    public static void main(String args[]) {
        try {
            String result = "";
            Test test = new Test();
            double value = 0.0004;
            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)
            new DecimalFormat("#,###,###,##0.00##").format(d);
        return String.valueOf(d);
    }

}

3 个答案:

答案 0 :(得分:6)

你刚忘了回复陈述。

else if (4 == decimals)
    return new DecimalFormat("#,###,###,##0.00##").format(d);

所以在4的情况下,你使用DecimalFormat格式化你的数字,但是在最后的其他地方之后只返回double的正常字符串表示。

答案 1 :(得分:2)

相反如何:

public static String numberFormat(double d, int decimals) {
    return String.format("%." + decimals + "f", d);
}

似乎比你现在所做的更干净。

答案 2 :(得分:0)

例如:

Double a = 2.85d / 10000;
DecimalFormat formatter = new DecimalFormat("0.0000");
System.out.println(formatter .format(a));

输出:

0.0003

您也可以使用toPlainString(),然后将其转换为数字:

Double a = 2.85d / 10000;
System.out.println(BigDecimal.valueOf(a).toPlainString());

输出:

0.000285