本地化指数表示法?

8
我正在尝试将数字转换为本地化字符串。
对于整数和货币值来说,这很简单,因为字符串只是一系列数字和数字分组分隔符。例如:
  • 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×1023

或更具体地说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 来表示 指数运算


只是提醒 - 这实际上是一个诚实的问题:是否真的存在将小数部分加上“千分位”分隔符的文化? - Romain
@Romain:我没有在Windows中看到任何地区设置会导致GetNumberFormat使用任何数字分组。 - Ian Boyd
2个回答

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

/numbers/symbols/exponential显示给定文化中的E或其等效项。

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

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

如果您想要支持所有文化,请从所有文化文件中收集相关信息并将其打包到自己的特定数据库中。这不是一个简单的工作,但是可能性是存在的。

我快速查看了几个非常不同的文化中的数据,如en、fr、zh、ru、vi、ar:它们都包含相同的模式:#E0。看起来要么数据不准确(我非常怀疑),要么你其实不需要关心:每个人都以相同的方式处理,你实际上不需要在意。

0

对于波兰语,应该是6.0221417930·1023
我认为Serge(非常好的答案)提到的CLDR在这里无效。然而,它仍然是最好的信息来源。否则,您需要要求翻译人员为您翻译模式(这将需要一条注释,其中包含您正在进行的良好解释)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接