局部指数表示法?

时间:2011-09-15 19:43:18

标签: windows winapi localization globalization number-formatting

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

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

  • 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×10 23

或更具体地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 进行指数

2 个答案:

答案 0 :(得分:5)

据我所知,取幂符号不是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。看起来数据不准确(我非常怀疑。)或者您不必非常关心:每个人都以同样的方式做到这一点而您实际上并不在乎。

答案 1 :(得分:0)

对于波兰语,它应该是6,0221417930·10 23 我不认为Serge提到的CLDR(很棒的答案BTW)在这里是有效的。但是,它仍然是最好的信息来源。否则,您需要让翻译人员为您翻译模式(这需要一个评论,并说明您的目标)。