【问题标题】:Format decimal to string in correct culture info在正确的文化信息中将十进制格式化为字符串
【发布时间】:2010-02-26 12:56:04
【问题描述】:

将十进制数格式化为字符串以在正确的文化信息中显示 UI 的最佳方法是什么?

【问题讨论】:

  • myDecimal.ToString() 有什么问题?
  • 从数据库加载 nHibernate 对象,属性是十进制的,当调用 toString() 时,它会使用正确的小数位进行格式化。但是,当从文本保存设置相同的属性时,例如。 allocation.Price = Decimal.Parse(price, CultureInfo.CurrentCulture);但是一旦设置并调用 allocation.Price.toString() 小数位就不会添加。例如,十进制解析后 15 想要 15.00,但 toString 只给出 15。奇怪吗?

标签: .net cultureinfo


【解决方案1】:

向 ToString 添加格式:myDecimal.ToString("#.00")myDecimal.ToString("C")

对于可为空的小数 (decimal?),您需要使用 .Value 属性 (myNullableDecimal.Value.ToString("C")) 或将值转换为普通(不可为空)小数。当值为null 时一定不要这样做,否则会出现异常!

请参阅StandardCustom 数字格式字符串的文档。

【讨论】:

  • nHibernate 属性是十进制的?因此,格式选项在 toString 方法上不可用。现在创建十进制变量并使用您的答案并进行处理。干杯!
  • 如果它是 Nullable 那么您可以使用 .Value 属性或强制转换为十进制(如果您确定它不为空)
  • 链接失效
  • @WeaponX - 已修复。感谢您的提醒。
【解决方案2】:

为什么不decimalVar.ToString("F2", CultureInfo.CurrentCulture);。有关格式字符串(“F2”部分)及其作用,请参阅 Standard Numeric Format StringsCustom Numeric Format Strings

【讨论】:

    【解决方案3】:

    使用:

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);
    

    【讨论】:

    • 那又怎样?他不是要求动态文化信息。
    • JavaScript 无法识别“全局”,因此我使用了 .ToString("#.00", New CultureInfo("en-GB", False))
    【解决方案4】:

    另外,如果你想使用用户指定的文化,你可以使用:

    
    string userInfo = "en-US";
    
    yourDecimal.ToString("N2", CultureInfo.CreateSpecificCulture(userInfo));
    
    

    yourDecimal.ToString("N2", new CultureInfo(userInfo));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多