7

我想把数字转换成本地化的字符串。本地化的指数符号?

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

  • 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来格式货币值)。

但是一些号码不能在固定符号合理表示,并且需要scientific notation

  • 6.0221417930×10

或者更具体E notation

  • 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 

,但我不知道其他文化(除了我的文化)使用Ë

+0

只是一个音符 - 这真的是一个真实而诚实的问题:真的有文化,十进制值的小数部分有一个“千分之一”分隔符? – Romain

+0

@Romain:我在Windows中看不到任何会导致'GetNumberFormat'使用任何数字分组的语言环境。 –

回答

4

据我所知,指数符号不是Windows或.NET语言环境数据的一部分。然而,Unicode CLDR可以帮助once again:它<numbers>部分包含你在找什么:

/numbers/symbols/exponential说:E或等值在特定的文化。

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

您需要下载zipped core CLDR data并从common/main目录中提取您感兴趣的每种文化的文件。

如果您希望能够支持所有文化,您必须从所有文化文件中收集相关信息并将其包装到您自己的特定数据库中。不是一件小事,但它是可能的。

我简要介绍了en,fr,zh,ru,vi,ar等几种截然不同的文化中的数据:它们都包含相同的模式:#E0。它看起来好像数据不准确(我严重怀疑),或者你不需要关心:每个人都以同样的方式做,而你实际上不应该在意。

0

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