我有一个双精度数组,想将其打印到控制台上,保留小数点后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()
进行此操作,还是必须遍历数组中的每个值并分别打印它们?
答案 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]