Локализованная экспоненциальная запись? - PullRequest
8 голосов
/ 15 сентября 2011

Я пытаюсь преобразовать числа в локализованные строки.

Для целых чисел и денежных значений это довольно просто, поскольку строка представляет собой просто последовательность цифр и разделителей цифр.Например:

  • 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 для возведения в степень .

Ответы [ 2 ]

5 голосов
/ 16 сентября 2011

Насколько я знаю, нотация возведения в степень не является частью данных локали Windows или .NET.Однако Unicode CLDR может помочь еще раз : его <numbers> разделы содержат то, что вы ищете:

/numbers/symbols/exponential говорит E или его эквивалентв данной культуре.

/numbers/scientificFormats/ показывает шаблон возведения в степень.

Вам необходимо загрузить сжатые данные ядра CLDR *1016* и извлечь файл для каждой культуры, которую выВы заинтересованы в каталоге common/main.

Если вы хотите иметь возможность поддерживать все культуры, вам нужно будет собрать соответствующую информацию из всех файлов культур и упаковать ее в свою конкретную базу данных.Не совсем тривиальная работа, но это возможно.

Я кратко рассмотрел данные в нескольких очень разных культурах, таких как en, fr, zh, ru, vi, ar: Все они содержат один и тот же шаблон:#E0.Похоже, либо данные неточны (я серьезно сомневаюсь.), Либо вам не нужно заботиться на самом деле: все делают это одинаково, и вам на самом деле все равно.

0 голосов
/ 16 сентября 2011

Для польского это должно быть 6,0221417930 · 10 23 .
Я не думаю, что CLDR, упомянутый Сержем (отличный ответ BTW), действителен здесь. Тем не менее, это все еще лучший источник информации. В противном случае вам нужно будет попросить ваших переводчиков перевести шаблон для вас (для этого потребуется комментарий с хорошим объяснением того, что вы делаете).

...