7

Próbuję konwertować liczby na zlokalizowane ciągi.Zlokalizowana notacja wykładnicza?

Dla liczb całkowitych i wartości pieniężnych jest to dość proste, ponieważ ciąg jest po prostu ciągiem cyfr i separatorów grupujących cyfry. Np:

  • 12 345 678 901 (bułgarski)
  • 12.345.678.901 (kataloński)
  • 12,345,678,901 (angielski)
  • 12,34,56,78,901 (hindi)
  • 12.345.678.901 (Frisian)
  • 12?345?678?901 (paszto)
  • 12'345'678'901 (niemiecki)

Używam funkcji Windows GetNumberFormat do formatowania liczb całkowitych (i GetCurrencyFormat do formatowania wartości pieniężnych).

Ale niektóre numery nie mogą być racjonalnie reprezentowane w stałej notacji i wymagają scientific notation:

  • 6,0221417930 x 10

lub dokładniej E notation:

  • 6.0221417930E23

Jak uzyskać zlokalizowaną wersję notacji naukowej?

Przypuszczam, że mógł go skonstruować stosując miejscowe numery:

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 

ale nie wiem, czy inne kultury (kultur oprócz kopalni) użyć E dla potęgowania.

+0

Po prostu notatka - która jest naprawdę aktualna i szczera: czy istnieją naprawdę kultury, w których dziesiętna część wartości dziesiętnych ma separator "tysięczny"? – Romain

+0

@Romain: nie widzę żadnych ustawień narodowych w systemie Windows, które powodują, że 'GetNumberFormat' używa dowolnej grupy cyfr. –

Odpowiedz

4

Zgodnie z moją wiedzą notacja potęgowania nie jest częścią danych regionalnych Windows ani .NET. Jednak Unicode CLDR może pomóc once again: Jego <numbers> sekcje zawiera to, czego szukasz:

/numbers/symbols/exponential mówi E lub jego odpowiednik w danej kulturze.

/numbers/scientificFormats/ pokazuje wzór potęgowania.

Musisz pobrać zipped core CLDR data i wyodrębnić plik dla każdej kultury, którą jesteś zainteresowany z katalogu common/main.

Jeśli chcesz wesprzeć wszystkie kultury, musisz zebrać odpowiednie informacje ze wszystkich plików kultury i spakować je do swojej własnej bazy danych. Niezbyt trywialna praca, ale jest to możliwe.

Spojrzałem szybko na dane w kilku bardzo różnych kulturach, takich jak en, fr, zh, ru, vi, ar: Wszystkie zawierają ten sam wzór: #E0. Wygląda na to, że dane nie są dokładne (poważnie wątpię). Nie musisz się troszczyć: wszyscy robią to w ten sam sposób i nie powinniśmy się tym przejmować.

0

Dla języka polskiego powinno być 6,0221417930 · 10 .
Nie sądzę, że CLDR wymienione przez Serge (Wielka odpowiedź BTW) jest ważna tutaj. Jednak wciąż jest najlepszym źródłem informacji. W innym przypadku musiałbyś poprosić tłumaczy o przetłumaczenie wzoru (co wymagałoby komentarza z dobrym wyjaśnieniem, co robisz).