2014-10-27 26 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