C#中如何为String.Format()的货币格式化小数位数设置动态参数?
C# 动态指定货币格式化小数位数实现方案
方法1:动态构造格式字符串适配String.Format
你原来的写法问题在于插值字符串会直接解析0为常量值,而非String.Format的占位符,只需要对格式字符串中的大括号做转义即可实现需求:
var decimals = 2; var amount = 100m; var culture = CurrencyProvider.Instance.GetCultureInfo("USD"); // 两个连续大括号会被插值字符串识别为字面量大括号输出 string formatTemplate = $"{{0:C{decimals}}}"; return String.Format(culture, formatTemplate, amount);
方法2:直接使用ToString重载(更简洁)
不需要借助String.Format,直接调用decimal的ToString重载就能实现相同效果,语法更精简:
var decimals = 2; var amount = 100m; var culture = CurrencyProvider.Instance.GetCultureInfo("USD"); return amount.ToString($"C{decimals}", culture);
注意:传入的小数位数需为合法非负整数,超出区域文化支持范围的取值会自动fallback到对应货币的默认小数位数。
内容的提问来源于stack exchange,提问作者Mihály Dombi
相关产品推荐
相关产品推荐

