首先大家看到以下代码,第一直觉结果会是什么 :
var result = 1234.56.ToString("#,#,#.##");Console.WriteLine(result);
答案是1,234.56
不是1,2,3,4.56
。
原因是ToString(string format)方法预设使用Thread.CurrentThread.CurrentCulture
,以我个人电脑而言NumberGroupSzies
属性是3
,导致最起码需要3个数字才会加上逗号
ToString源码 :
[SecuritySafeCritical][__DynamicallyInvokable]public string ToString(string format){return Number.FormatDouble(this, format, NumberFormatInfo.CurrentInfo);}[__DynamicallyInvokable]public static NumberFormatInfo CurrentInfo{[__DynamicallyInvokable]get{CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;if (!currentCulture.m_isInherited){NumberFormatInfo numInfo = currentCulture.numInfo;if (numInfo != null){return numInfo;}}return (NumberFormatInfo)currentCulture.GetFormat(typeof(NumberFormatInfo));}}
假如想要按上面format方式,我们也只需要修改NumberGroupSzies属性等于1就可以
CultureInfo culture = new CultureInfo(string.Empty, true){ NumberFormat = { NumberGroupSizes = new int[] { 1 } }};Console.WriteLine(1234.56.ToString("#,#,#.##", culture));
以上问题来源于今天看到的有趣问题c# - decimal number comma styling - Stack Overflow
简单小趣闻分享给大家 ^_^