我想为数组中的所有元素打印精度为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 ) );
}