局部指数表示法?

Ian*_*oyd 8 windows globalization winapi localization number-formatting

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

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

  • 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格式化货币值).

但是有些数字不能用固定的符号来合理地表示,并且需要科学记数法:

  • 6.0221417930×10 23

或者更具体地说是E符号:

  • 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
Run Code Online (Sandbox Code Playgroud)

但我不知道其他文化(除了我的文化)是否使用E进行取幂.

Ser*_*ier 5

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

/numbers/symbols/exponentialE在给定的文化中说或等同。

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

您需要下载压缩后的核心CLDR数据,并从common/main目录中提取您感兴趣的每种区域性的文件。

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

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