2013-05-13 87 views
3

我認爲這很簡單; .Net框架有很多功能可以完全按照您的需要對一個數字進行格式化,但仍然無法完成這項工作。顯示有文化信息但沒有格式化的號碼

問題:根據歐洲規則顯示數字,所以用「。」表示。對於千位分隔符和「,」對於小數分隔符,但不固定小數位數。

所以,例如,如果我有1234,那應該打印爲"1.234",並且1234.5應該打印爲"1.234,5"。但是我試過的格式都沒有做到!

例子:假設ci是的CultureInfo用正確的設置,然後

num.ToString(ci)      -> "1234,5"   小數OK,但沒有千位分隔符
num.ToString("G", ci) -> "1234,5"   同上
num.ToString("N", ci) -> "1.234,50" 千位分隔符OK,但太多的小數

等。與使用NumberFormatInfo而不是CultureInfo或嘗試使用String.FormatConvert.ToString類似。任何人有任何其他想法?

回答

0

您可以硬編碼格式字符串這樣

num.ToString("###,###,###.####"); 

對於TU當前線程的文化信息這將輸出。如果你有歐洲文化,你會得到「。」作爲千位分隔符。這將輸出最多4位不等於0的小數。如果數字較大或需要更大的精度,則可以增加小數位數和組數。 但是,不知道是否有一個更優雅的方式......

+0

謝謝!我測試了一下,這絕對是我需要的。除了所有#之外,它不顯示數字0,但可以將小數點前的最後一個#替換爲0而不會丟失功能。所以,就是這樣。謝謝。 – 2013-05-13 14:24:55

0

也許你在尋找這樣的:使用

number.ToString("#,##0.##", customCulture); 

例子:

double first = 12345.67; 
double second = 1234567; 
var customCulture = (System.Globalization.CultureInfo) 
    System.Globalization.CultureInfo.CurrentCulture.Clone(); 
customCulture.NumberFormat.NumberDecimalSeparator = ","; 
customCulture.NumberFormat.NumberGroupSeparator = "."; 
Console.WriteLine("First : " + first.ToString("#,##0.##", customCulture)); 
Console.WriteLine("Second: " + second.ToString("#,##0.##", customCulture)); 

沒有確切的定義文化信息的,你可以不保證在任何文化中都有相同的結果。

這是結果,我獲得控制檯:

First : 12.345,67 
Second: 1.234.567