如何将具有 0 的 2 个小数位添加到数组

How to add 2 decimal places having 0s to an array

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

您数组中的对象类型是 float。你不能告诉它是一个带 N 个小数位的浮点数,它只是一个原始值。

通常您希望在需要使用原语时对其进行格式化,例如作为String

在这种情况下:

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

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

Elements are converted to strings as by String.valueOf(float).

String.valueOf(float)的实现是:

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

因此,您的代码片段中声明的 df 从未被使用。

你能做什么?正如@Koenigsberg 在他的回答中提到的,您可以遍历数组,然后在两侧添加方括号,并在元素之间添加逗号。

如果可以使用双精度而不是浮点数,则可以使用 java 流。代码示例将是:

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

如果你不能使用双打,你可以迭代 arr:

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