本地化的指数表示法?

我试图将数字转换成本地化的string。

对于整数和金钱的价值很简单,因为string只是一系列的数字和数字分组分隔符。 例如:

  • 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 

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

Solutions Collecting From Web of "本地化的指数表示法?"

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

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

/numbers/scientificFormats/显示指数模式。

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

如果你想能够支持所有的文化,你将不得不从所有的文化文件中收集相关的信息,并把它打包到你自己的特定的数据库中。 不是一件小事,但它是可能的。

我简要介绍了几种截然不同的文化,如en,fr,zh,ru,vi,ar:它们都包含相同的模式: #E0 。 它看起来好像数据不准确(我严重怀疑),或者你不必真的在乎:每个人都这样做,你不应该真的在意。

波兰应该是6,0221417930·10 23
我不认为Serge提到的CLDR(伟大的回答BTW)在这里是有效的。 但是,它仍然是最好的信息来源。 否则,您需要请您的翻译人员为您翻译这个模式(这需要您的评论,并说明您的意见)。