本地化的指数符号?
我试图将数字转换为本地化的字符串。
对于整数和金钱的价值很简单,因为字符串只是一系列的数字和数字分组分隔符。 例如:
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
格式化货币值)。
但是有些数字不能以固定符号合理表示,并且需要科学记数法:
或更具体地E符号:
我如何获得科学记数法的本地化版本?
我想我可以使用本地化的数字构造它:
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来取幂。
就我所知,指数符号不是Windows或.NET语言环境数据的一部分。 但是,Unicode CLDR可以再次提供帮助:它的<numbers>
部分包含您要查找的内容:
/numbers/symbols/exponential
在特定文化中表示E
或其等价物。
/numbers/scientificFormats/
显示指数模式。
您需要下载压缩的核心CLDR数据,并从common/main
目录中提取您感兴趣的每种文化的文件。
如果您希望能够支持所有文化,您必须从所有文化文件中收集相关信息并将其包装到您自己的特定数据库中。 不是一件小事,但它是可能的。
我简要介绍了一些非常不同的文化中的数据,例如en,fr,zh,ru,vi,ar:它们都包含相同的模式: #E0
。 它看起来好像数据不准确(我严重怀疑),或者你不需要关心:每个人都以同样的方式做,而你实际上不应该在意。
波兰语应该是6,0221417930·1023。
我不认为Serge提到的CLDR(伟大的答案BTW)在这里是有效的。 但是,它仍然是最好的信息来源。 否则,您需要请您的翻译人员为您翻译模式(这需要您的评论并说明您的意见)。
上一篇: Localized exponential notation?
下一篇: How do I override the default tabindent for Ruby in Vim?