2014-10-27 94 views
-2

当我设置了双重的默认格式是否有写double值到控制台时设置的默认格式的任何选项?可以用Console.WriteLine

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

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

现在我使用:

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

给我们一些帮助。你可以显示当前用于写入控制台的代码吗? – 2014-10-27 23:46:10

+0

@GrantWinney我编辑问题 – Peter 2014-10-27 23:51:44

回答

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。然后它应用格式化字符串(如果有的话)。您不能覆盖ToStringdouble,因此无法更改“默认”。

+0

我知道,但它不干净的代码。当我发现我需要显示3个十进制数,所以我有一个问题,所以我至少有constat和使用Math.Round – Peter 2014-10-28 00:02:50

+0

@Peter这是不是干净?你不能强制'double.ToString'表现不同。我不知道你在这里期待什么。我的确给我的答案加了一个解释。希望它对你有用。 – BradleyDotNET 2014-10-28 00:06:11

1

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

这将圆您每次传中数,然后创建一个字符串出数字(放置一个“X”每个人之间,类似于你的输出):

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

然后只将它传递double数组来操作上:

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

输出:

2.23 X 3.32 X 5.23

+0

+1,很好的建议。 – BradleyDotNET 2014-10-28 00:06:38

+0

谢谢。 :)你赢得更简洁。 – 2014-10-28 00:07:33

+0

那是可能的,但如果我有Console.WWriteLine它不能使用( “{0} {1} {2}”,doubleVariable,stringVarible,doubleVariable2) – Peter 2014-10-28 00:16:51