如何在数组中添加两个小数点后0位



我想为数组中的所有元素打印精度为2的值。

例如,如果我输入11.00,我期望输出:

[11.00, 11.04, 11.09, 11.15, 11.19, 11.22]

但我得到了:

[11.0, 11.04, 11.09, 11.15, 11.19, 11.22]

其中第一个元素缺少尾随零。

import java.io.*;
import java.util.*;
import java.text.DecimalFormat;
import static java.lang.Math.*;
public class Main{
public static void main (String[] args){
Scanner s = new Scanner(System.in);
DecimalFormat df = new DecimalFormat(".00");
df.setMaximumFractionDigits(2);
float a=s.nextFloat();
float arr[]= new float[6];
// arr[0]=Float.valueOf((df.format(a+0.001)));
arr[0]=a;
arr[1]=a+(float)(0.04);
arr[2]=a+(float)(0.09);
arr[3]=a+(float)(0.15);
arr[4]=a+(float)(0.19);
arr[5]=a+(float)(0.22);
System.out.println(Arrays.toString(arr));

}
}

让我们从为什么它不起作用开始吧?来自Arrays.toString文档:

元素通过String.valueOf(float(.转换为字符串

String.valueOf(float)的实现是:

public static String valueOf(float f) {
return Float.toString(f);
}

因此,永远不会使用代码片段中声明的df

你能做什么?正如@Koenigsberg在他的回答中提到的,你可以迭代数组,然后在两边加括号,在元素之间加逗号。

如果您可以使用double而不是float,那么您可以使用java流。代码示例为:

System.out.println("[" + Arrays.stream(arr).mapToObj(df::format).collect(Collectors.joining(", ")) + "]");

如果你不能使用doubles,你可以迭代arr:的索引

System.out.println("[" + IntStream.range(0, arr.length).mapToObj(i -> df.format(arr[i])).collect(Collectors.joining( ", ")) + "]");

数组中的对象类型是float。您不能告诉它是一个小数点为N的浮点值,它只是一个基元值。

通常,您需要在需要使用基元时对其进行格式化,例如作为String

在这种情况下:

for( float f : arr )
{
System.out.println( df.format( f ) );
}

最新更新