You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用String.Format("{0:C}",45)得到₹而非$的原因咨询

问题原因分析

这问题我之前帮同事排查过,核心原因其实是你的代码默认采用了**印度区域的文化设置(Culture)**来执行货币格式化操作。

具体细节拆解:

  • .NET 里的 String.Format("{0:C}", value) 方法,默认会使用当前线程的 CultureInfo(区域文化信息)来决定货币符号、小数位数这些格式规则。印度区域(比如 en-IN 印度英语、hi-IN 印地语印度)对应的货币符号就是 ₹,所以才会出现这个结果。
  • 你可以通过打印当前线程的文化信息来验证:
    Console.WriteLine(System.Threading.Thread.CurrentThread.CurrentCulture.Name);
    
    如果输出是 en-IN 或者其他印度相关的区域代码,那就坐实了这个原因。

快速解决方法:

如果要强制显示 $ 符号,只需要在格式化时指定美国区域的 CultureInfo 即可:

using System.Globalization;

// 强制用美国区域格式化货币
var result = String.Format(CultureInfo.GetCultureInfo("en-US"), "{0:C}", 45);
// 输出结果会是 $45.00(具体小数位数根据区域规则)

要是你的整个应用都需要统一使用美国区域的格式化规则,也可以在程序启动时全局设置:

CultureInfo.DefaultThreadCurrentCulture = CultureInfo.GetCultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.GetCultureInfo("en-US");

内容的提问来源于stack exchange,提问作者saran a

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:44:39