【问题标题】:String.Format consider locale or not?String.Format 是否考虑语言环境?
【发布时间】:2009-07-30 02:32:59
【问题描述】:

String.Format 是否有两种工作方式: 如果我们使用 C、N、P 等内置格式......它会考虑语言环境设置吗? 如果我们使用 #,##0.000 等自定义格式代码,它不会考虑区域设置?

在我的代码中,我使用这样的方法

String.Format("{0:#.##0,000}", 值);

因为我的国家使用逗号作为小数分隔符

但结果仍然是:1,234.500 好像它认为点作为小数分隔符。

请帮忙!

【问题讨论】:

  • 你有没有费心去看String.Format的文档?

标签: c# internationalization


【解决方案1】:

你想使用CultureInfo:

value.ToString("N", new CultureInfo("vn-VN"));

使用String.Format

String.Format(new CultureInfo("vi-VN"), "N", value);

由于您在河内(来自个人资料),因此我使用了越南的代码,即vn-VN

【讨论】:

    【解决方案2】:

    这行得通。格式化的值为123.456,789,根据es-ES 是正确的

       IFormatProvider iFormatProvider = new System.Globalization.CultureInfo("es-ES");
       var value = 123456.789001m;
    
       string s = value.ToString("#,##0.000", iFormatProvider);
    
       string s2 = string.Format(iFormatProvider, "{0:#,##0.000}", value);
    
       FormattableString fs = $"{value:#,##0.000}";
       string s3 = fs.ToString(iFormatProvider);
    

    请注意,,. 使用的是“标准”en-US 样式,但带有格式提供程序的 .ToString()string.Format() 是正确的。

    【讨论】:

      【解决方案3】:

      您应该确保您的线程使用正确的文化:

              Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture
              Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture
              FrameworkElement.LanguageProperty.OverrideMetadata(GetType(FrameworkElement), New FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)))
      

      【讨论】:

      • 如果您试图在同一线程中显示不同文化中的数字、日期等会发生什么?
      • @ChrisFox 取决于您是否成功。 :-)
      • 我做到了:-) 1234567890
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多