2011-03-14 79 views
1

我需要使用特定格式格式化數字。我不想與計算機的區域設置格式決定,所以我想:用於格式化的Double.ToString

string s = "219171" 
string result = Convert.ToDouble(s).ToString("0,0.0") //219,171.0 
string result = Convert.ToDouble(s).ToString("0.0,0") //219171.00 

我想它顯示爲

219.171,00

謝謝

+4

您需要使用格式化的文化,告訴格式化什麼千位分隔符,小數點是。 – BoltClock 2011-03-14 09:33:09

回答

7

創建自定義的NumberFormatInfo實例,並調用toString()時傳遞英寸

NumberFormatInfo nfi = new NumberFormatInfo(); 
nfi.NumberGroupSeparator = "."; 
nfi.NumberDecimalSeparator = ","; 

double s = 219171; 
string result = s.ToString("N2", nfi); 

NumberFormatInfo屬於System.Globalization

+0

這解決了這個問題。謝謝,第一次一個「墨菲」對我的生活有任何好處:) – Pabuc 2011-03-14 09:49:04

3

您可以指定您希望在Double.ToString(IFormatProvider provider)過載中格式化的區域設置。它不提供它,將使用Thread.CurrentThread.CurrentUILocale。如果您希望它與計算機設置無關,則可以使用Double.ToString(CultureInfo.InvariantCulture)

如果您想完全自定義格式(例如十進制分隔符之前/之後的十位數字),請在formatstring overview中查看。

0

下應該做的伎倆:

string result = (Convert.ToDouble(s)/1000).ToString("##0.000\\,00"); 

除以1000改變了小數點的位置。每個#或0是一個數字。

或者,你可以使用:

string result = Convert.ToDouble(s).ToString("[email protected]").Replace('.', ',').Replace('@', '.'); 
+0

除以1000是否需要計算?當然,創建自定義格式會更容易,所需資源更少。 – 2011-03-14 09:43:00

+0

創建自定義格式更好; @墨菲11在那裏做得很好。 – 2011-03-14 09:46:51

0

我可能會做這樣的:

// save parsing, ignoring current settings 
double d = double.Parse(s, CultureInfo.InvariantCulture); 
// whatever culture you actually want, assuming German 
var culture = CultureInfo.GetCultureInfo("de"); 
string formatted = d.ToString(culture);