我试图将数字转换成本地化的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
格式货币值)。
但有些数字不能用固定的符号来合理地表示,需要科学记数法 :
或更具体地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·10 23 。
我不认为Serge提到的CLDR(伟大的回答BTW)在这里是有效的。 但是,它仍然是最好的信息来源。 否则,您需要请您的翻译人员为您翻译这个模式(这需要您的评论,并说明您的意见)。