【问题标题】:.Net Converting a number from one culture to another.Net 将数字从一种文化转换为另一种文化
【发布时间】:2008-10-31 16:24:20
【问题描述】:

在 .Net 中(更具体地说是 VB,但这并不重要),有没有办法严格通过该数字的类型将数字的格式从一种文化更改为另一种文化?

问题是这样的:在英语中,数字是 123.45。而在瑞典,这个数字是 123,45

有没有一种方法可以将 123,45 转换为 123.45 而无需将其转换为字符串(然后使用格式化方法),然后再将其转换回正确的类型(单、双等)?

【问题讨论】:

    标签: .net localization internationalization


    【解决方案1】:

    这不是将 转换为 字符串然后 返回 为正确类型的情况 - 恰恰相反。

    数字本身没有任何关于它的格式信息。浮子是浮子是浮子。只有当您解析或格式化时,文化才会变得相关。

    如果您已经有了一个浮点值,那么只需根据阅读它的人的文化对其进行适当的格式化。

    【讨论】:

      【解决方案2】:

      将其保留为数字。更改线程的cultureInfo,它会相应显示,无需转换。

      例如

      Thread.CurrentThread.CurrentCulture = New CultureInfo("se-SE")
      Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
      

      永远不要尝试将数字或日期专门格式化为字符串,否则你将走上地狱之路。

      更新:Jon 在 cmets 中提出要注意的一点,您会知道它是否适用于您的情况。

      【讨论】:

      • 更改线程的 CultureInfo 听起来比在要格式化时使用特定 CultureInfo 显式格式化更冒险。当然,如果整个线程改变文化有意义,那很好 - 但我不会改变文化、格式,然后再改回来
      • 你说得对,我假设整个视图都是瑞典语。当然,如果他想根据两种文化在同一页面上显示两者,则根据该控件的相关cultureInfo格式化控件。
      • 问题不在于它的显示,而是应用程序将值错误地保存到数据库中,因此 .07 被写为 ,07 并且当读取/更新值时,数据库转换它变成 7(英文)。我一直在尝试在演示文稿和数据 lyr 之间建立脱节。
      【解决方案3】:

      您可以使用NumberFormatInfo 类来做到这一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-24
        • 2017-02-05
        相关资源
        最近更新 更多