-2

double将值写入控制台时,是否有任何设置默认格式的选项?

我有很多double值要输出到控制台,我需要将所有值的格式设置为小数点后两位,例如Math.Round(number, 2).

我可以为所有这些设置吗?

现在我正在使用:

Console.WriteLine("{0} x {1} x {2}",
                  Math.Round(a, 2), Math.Round(b, 2), Math.Round(c, 2));
4

2 回答 2

3

Console.Writeline只是一个将字符串输出到控制台的函数。您无法更改字符串的“默认”格式,因此您的问题的基本答案是NO

但是,您的代码可以简化。通过指定格式字符串,您可以避免使用Math.Round

Console.WriteLine("{0:D2} x {1:D2} x {2:D2}", a, b, c);

“D2”是小数点后 2 位的小数。有关其他常见格式字符串,请参阅MSDN。请注意,这是有效的,因为在Console.Writeline后台调用String.Format

至于为什么你不能这样做;String.Format接受每个参数并调用ToString它。然后它应用格式化字符串(如果有的话)。您不能覆盖ToStringadouble因此无法更改“默认值”。

于 2014-10-27T23:54:58.307 回答
1

另一种可能性,如果你发现你必须使用Math.Round(或对数字执行一些其他操作)是编写你自己的四舍五入方法。

这将对您传入的每个数字进行四舍五入,然后从数字中创建一个字符串(在每个数字之间放置一个“x”,类似于您的输出):

private static void WriteNumbers(IEnumerable<double> numbers)
{
    Console.WriteLine(string.Join(" x ", numbers.Select(n => Math.Round(n, 2))));
}

然后只需传递一个双精度数组即可对其进行操作:

WriteNumbers(new[] {2.2344, 3.323, 5.23432});

输出:

2.23 x 3.32 x 5.23

于 2014-10-28T00:05:26.637 回答