如何在Java中保留n个小数位

时间:2014-04-02 22:55:18

标签: java double decimal rounding digits

嗨所有这可能是一个微不足道的问题但是现在我找不到任何解决方案。所以请求你的帮助!

我想要得到的是一个特定的编码表,如下所示:

0.000
0.100
0.200

我需要跟踪零,因为我将使用它们来重建特定数组的一部分。创建这些数字的原始循环是:

for(int k=0;k<m_0;k++){
    for(int l=0;l<m_1;l++){
        for(int a=0;a<a1;a++){

            Y[x-1]=0.1*k+0.01*l+0.001*a;
            x++;

        }

    }

}

问题!我无法在小数位后修复零,而不是在上面描述我得到的表:

0.0
0.1
0.2

作为一种解决方案,我尝试使用BigDecimal和DecimalFormat,但没有成功。有什么建议?

UPD 我想说的几句话。我正在编码特定的数组到数组和返回索引对应。例如,0.100将被分解为1 and 0 and 0并用作数组索引标记,如:

Array1[Method(1,0,0,Y(i)][Method(1,0,0,Y(i))]=Array2[1][0][0]

因此我需要一个适合分配数组索引的输出,而字符串不会做这笔交易。

3 个答案:

答案 0 :(得分:7)

DecimalFormat class是正确的观看位置。你只需要正确的格式。

DecimalFormat df = new DecimalFormat("0.000");
System.out.println(df.format(0.1));

输出:

0.100

答案 1 :(得分:2)

作为DecimalFormat类的替代方案,我想提出以下内容(我经常使用):

步骤1:创建一个允许我指定要保留的单位数的函数。这是此功能的副本。

public static String format(Number n) {
        NumberFormat format = DecimalFormat.getInstance();
        format.setRoundingMode(RoundingMode.FLOOR);
        format.setMinimumFractionDigits(0);
        format.setMaximumFractionDigits(2);
        return format.format(n);
    }

步骤2:只要有格式化输出,就调用该函数。下面是一个使用此函数设置适当的小数位长度的简单示例:

System.out.println("Based on this, the wind chill index was calculated to be " + format(chill));    

请注意,您只需更改一行:

format.setMaximumFractionDigits(2);

format.setMaximumFractionDigits(n);

取决于您所需的小数。

答案 2 :(得分:2)

打印数字时,您可以使用:

System.out.format("%.3f", yourDecimalNumber);