将双精度数组打印到2个小数位

时间:2018-12-01 04:30:29

标签: java arrays

我有一个双精度数组,想将其打印到控制台上,保留小数点后2位

double[] ary = {12.4324324, 14.5432, 58.3412};
System.out.println(Arrays.toString(ary));

当前这将打印出来

[12.4324324, 14.5432, 58.3412]

但是我宁愿打印它

[12.43, 14.54, 58.34]

是否可以使用Arrays.toString()进行此操作,还是必须遍历数组中的每个值并分别打印它们?

3 个答案:

答案 0 :(得分:3)

您需要迭代每个值才能以2个小数点打印。 使用Java 8,您可以在下面的方法中进行1行处理。

    double[] ary = { 12.4324324, 14.5432, 58.3412 };
    DecimalFormat df = new DecimalFormat("0.00");
    Arrays.stream(ary).forEach(e -> System.out.print(df.format(e) + " " ));

答案 1 :(得分:1)

我建议使用必要的格式选项简单地实现适当的toString方法,并通过便捷方法传递所需的“默认”格式:

import java.util.Locale;

public class DoubleArrayString
{
    public static void main(String[] args)
    {
        double[] array = { 12.4324324, 14.5432, 58.3412 };

        System.out.println(toString(array));
    }

    private static String toString(double array[])
    {
        return toString(array, Locale.ENGLISH, "%.2f");
    }

    private static String toString(double array[], Locale locale, String format)
    {
        if (array == null)
        {
            return "null";
        }
        StringBuilder sb = new StringBuilder("[");
        for (int i=0; i<array.length; i++)
        {
            if (i > 0)
            {
                sb.append(", ");
            }
            sb.append(String.format(locale, format, array[i]));
        }
        sb.append("]");
        return sb.toString();
    }

}

请注意,使用DecimalFormat时,输出将取决于Locale。在德国,当前接受的答案的输出为

12,43 14,54 58,34

即使,.,输出也将是

12.43 14.54 58.34

不是期望的(可能不是期望的)

[12.43, 14.54, 58.34]

此外,“将数组的内容打印到控制台”和“使用数组的内容创建字符串”(然后可以将其打印到控制台)之间有区别。上面显示的方法是一个只有一个功能的构造块,您还可以使用它来打印到System.err或任何其他“字符串消费者”中。

答案 2 :(得分:0)

您需要迭代数组并使用decimalFormat更新十进制数组。

DecimalFormat decimalFormat = new DecimalFormat("#.##");
double[] ary = {12.4324324, 14.5432, 58.3412};
int i =0;
for (double d : ary) {
     ary[i] = Double.valueOf(decimalFormat.format(d));
     i++;
}
System.out.println(Arrays.toString(ary));

上述程序的输出。

[12.43, 14.54, 58.34]