在向控制台写入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));
答案 0 :(得分:3)
Console.Writeline
只是一个向控制台输出字符串的函数。您无法更改字符串的“默认”格式,因此您的问题的基本答案是否。
但是,您的代码可以简化。通过指定格式字符串,您可以避免使用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
。然后它应用格式化字符串(如果有的话)。您无法覆盖ToString
double
,因此无法更改“默认”。
答案 1 :(得分: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