【问题标题】:How to add 2 decimal places having 0s to an array如何在数组中添加 2 个小数位为 0
【发布时间】:2020-10-26 09:02:17
【问题描述】:

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

【问题讨论】:

    标签: java floating-point decimal


    【解决方案1】:

    让我们从为什么它不起作用?来自Arrays.toString docs:

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

    String.valueOf(float)的实现是:

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

    因此,在您的代码 sn-p 中声明的 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( ", ")) + "]");
    

    【讨论】:

      【解决方案2】:

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

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

      在这种情况下:

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

      【讨论】:

      • 这不是预期的输出。分隔符呢?括号?
      • 添加漂亮的打印是微不足道的。 OP 的问题是关于如何将小数点添加到浮点数。我的答案的关键方面不是提供的代码,而是强调正在格式化字符串,而小数点表示不是float 原语所固有的。
      猜你喜欢
      • 2022-12-18
      • 2022-12-01
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2017-07-20
      • 2018-04-03
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多