如何正确使用NumberFormatInfo自定义小数的格式设置?
自定义小数格式的正确实现方式
先纠正你代码里的两个关键错误:
PerMilleSymbol是用来设置**千分比符号(‰)**的,和千位分隔符完全无关,千位分隔符确实应该用NumberGroupSeparator。NumberDecimalDigits并非仅适用于整数,它控制的是数值格式化时默认的小数位数,只要用对格式化方式就能生效。
完整正确代码示例
// 创建并配置NumberFormatInfo实例 var nfi = new NumberFormatInfo(); nfi.NumberDecimalDigits = 4; // 控制小数位数 nfi.NumberDecimalSeparator = "@"; // 控制小数分隔符 nfi.NumberGroupSeparator = "^"; // 控制千位分隔符 nfi.NumberGroupSizes = new int[] { 3 }; // 设置千位分组位数(默认3位,可自定义) // 测试格式化不同数值 decimal num1 = 123456.789m; string formatted1 = num1.ToString("N", nfi); // 输出:123^456@7890 double num2 = 9876.54321; string formatted2 = num2.ToString("N", nfi); // 输出:9^876@5432
关键注意事项
- 必须使用数值格式字符串(比如
"N"代表标准数值格式,或自定义格式"#,##0.0000")来应用NumberFormatInfo,直接调用无参数的ToString()会使用系统默认格式,不会读取你的配置。 - 若需更灵活的格式控制,可直接用自定义格式字符串结合
NumberFormatInfo,比如:
这里的string formatted = num1.ToString("#,##0.####", nfi);####对应你设置的NumberDecimalDigits,也可以直接写固定位数,效果一致。 NumberDecimalDigits的作用是当使用标准格式字符串(如"N")时,默认显示的小数位数;如果自定义格式字符串指定了小数位数,会覆盖这个设置。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

