如何在Java中保留n位小数

3

大家好,这可能是一个琐碎的问题,但是目前我还没有找到任何解决方案,所以请求您的帮助!

我想要获取一个特定的编码表,它看起来像这样:

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,但没有成功。有什么建议吗?
更新:我正在尝试将特定数组编码为数组,并返回索引对应关系。例如,0.100将被分解为1、0、0,并用作数组索引标签,如下所示: Array1 [Method(1,0,0,Y(i)] [Method(1,0,0,Y(i))]= Array2 [1] [0] [0] 因此,我需要一个适合分配数组索引的输出,字符串无法完成这个任务。

2
DecimalFormat类似乎是下面描述的最佳选择。您能否发布您尝试做什么,以便我们可以看到为什么失败了? - Jeff Wang
嗨,Jeff,我在更新部分描述了我想要实现的内容。我正在尝试从那些.100数组元素中获取像1,0和0这样的后续元素。这就是为什么浮点零至关重要的原因。 - madbitloman
3个回答

8

可以查看DecimalFormat, 这是正确的地方。只需使用正确的格式即可。

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

输出:

0.100

2

当您打印数字时,可以使用以下代码:

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

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

第二步:每当您有任何需要格式化的输出时,请调用该函数。以下是使用此函数设置适当的小数位长度的简单示例:
System.out.println("Based on this, the wind chill index was calculated to be " + format(chill));    

请注意,您可以简单地更改以下行:

format.setMaximumFractionDigits(2);

to

format.setMaximumFractionDigits(n);

根据您所需的十进制长度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接