【问题标题】:Localized exponential notation?局部指数符号?
【发布时间】:2011-11-18 04:35:30
【问题描述】:

我正在尝试将数字转换为本地化字符串。

对于整数和货币值,这非常简单,因为字符串只是一系列数字和数字分组分隔符。例如:

  • 12 345 678 901(保加利亚语)
  • 12.345.678.901(加泰罗尼亚语)
  • 12,345,678,901(英文)
  • 12,34,56,78,901(印地语)
  • 12.345.678.901(弗里斯兰语)
  • 12?345?678?901(普什图语)
  • 12'345'678'901(德语)

我使用 Windows GetNumberFormat 函数来格式化整数(并使用 GetCurrencyFormat 来格式化货币值)。

但有些数字不能用固定的符号合理表示,需要scientific notation

  • 6.0221417930×1023

或者更具体地说是E notation

  • 6.0221417930E23

如何获得科学记数法的本地化版本?

我想我可以使用本地化数字来构造它:

6.0221417930E23
6,0221417930E23
6.0221417930e23
6·0221417930E23
6·0221417930e23
6,0221417930e23
6,,0221417930e23
6.0221417930E+23
6,0221417930E+23
6.0221417930e+23
6,0221417930e+23
6·0221417930E+23
6·0221417930e+23
6,,0221417930e+23
6.0221417930E23
6,0221417930E23
6.0221417930e23
6,0221417930e23
6·0221417930E23
6·0221417930e23
6,,0221417930e23
6.0221417930X10^23
6,0221417930X10^23
6.0221417930x10^23
6,0221417930x10^23
6·0221417930X10^23
6·0221417930x10^23
6,,0221417930x10^23
6.0221417930·10^23
6,0221417930·^23
6.0221417930.10^23
6,0221417930.10^23
6·0221417930·^23
6·0221417930.10^23
6,,0221417930.10^23

但我不知道其他文化(除我之外的文化)是否使用 E 表示 求幂

【问题讨论】:

  • 请注意 - 这确实是一个真实而诚实的问题:真的存在十进制值的小数部分具有“千位”分隔符的文化吗?
  • @Romain:我在 Windows 中没有看到任何区域设置导致 GetNumberFormat 使用任何数字分组。

标签: windows winapi localization globalization number-formatting


【解决方案1】:

对于波兰语,它应该是 6,0221417930·1023
我不认为 Serge 提到的 CLDR(顺便说一句很好的答案)在这里有效。但是,它仍然是最好的信息来源。否则,您需要请您的翻译人员为您翻译该模式(这将需要一个注释并很好地解释您在做什么)。

【讨论】:

    【解决方案2】:

    据我所知,指数表示法不是 Windows 或 .NET 语言环境数据的一部分。但是,Unicode CLDR 可以帮助 once again:它的 <numbers> 部分包含您要查找的内容:

    /numbers/symbols/exponential 表示E 或其在给定文化中的等价物。

    /numbers/scientificFormats/ 显示求幂模式。

    您需要下载zipped core CLDR data 并从common/main 目录中提取您感兴趣的每种文化的文件。

    如果您希望能够支持所有文化,则必须从所有文化文件中收集相关信息并将其打包到您自己的特定数据库中。这不是一件微不足道的工作,但这是可能的。

    我快速浏览了几个非常不同的文化中的数据,例如 en、fr、zh、ru、vi、ar:它们都包含相同的模式:#E0。看起来要么数据不准确(我严重怀疑。)要么您不必真正关心:每个人都以相同的方式做事,而您实际上不应该关心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多