我需要使用特定格式格式化數字。我不想與計算機的區域設置格式決定,所以我想:用於格式化的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
謝謝
我需要使用特定格式格式化數字。我不想與計算機的區域設置格式決定,所以我想:用於格式化的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
謝謝
創建自定義的NumberFormatInfo實例,並調用toString()時傳遞英寸
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = ".";
nfi.NumberDecimalSeparator = ",";
double s = 219171;
string result = s.ToString("N2", nfi);
NumberFormatInfo
屬於System.Globalization
這解決了這個問題。謝謝,第一次一個「墨菲」對我的生活有任何好處:) – Pabuc 2011-03-14 09:49:04
您可以指定您希望在Double.ToString(IFormatProvider provider)
過載中格式化的區域設置。它不提供它,將使用Thread.CurrentThread.CurrentUILocale
。如果您希望它與計算機設置無關,則可以使用Double.ToString(CultureInfo.InvariantCulture)
。
如果您想完全自定義格式(例如十進制分隔符之前/之後的十位數字),請在formatstring overview中查看。
下應該做的伎倆:
string result = (Convert.ToDouble(s)/1000).ToString("##0.000\\,00");
除以1000改變了小數點的位置。每個#或0是一個數字。
或者,你可以使用:
string result = Convert.ToDouble(s).ToString("[email protected]").Replace('.', ',').Replace('@', '.');
除以1000是否需要計算?當然,創建自定義格式會更容易,所需資源更少。 – 2011-03-14 09:43:00
創建自定義格式更好; @墨菲11在那裏做得很好。 – 2011-03-14 09:46:51
我可能會做這樣的:
// 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);
您需要使用格式化的文化,告訴格式化什麼千位分隔符,小數點是。 – BoltClock 2011-03-14 09:33:09