2015-03-25 20 views
6

Intl.NumberFormat (patrz Mozilla's doc) zapewnia miły sposób w JavaScript formatowania liczb w aktualnej wersji locale`s jak ten:Czy istnieje sposób, aby odwrócić formatowanie przez Intl.NumberFormat w JavaScript

new Intl.NumberFormat().format(3400); // returns "3.400" for German locale 

Ale Nie mogłem znaleźć sposobu na odwrócenie tego formatowania. Czy jest coś takiego, jak

new Intl.NumberFormat().unformat("3.400"); // returns 3400 for German locale 

Dzięki za pomoc.

Odpowiedz

4

Znalazłem obejście:

var separator = new Intl.NumberFormat().format(1111).replace(/1/g, ''); 
"3.400".replace(new RegExp('\\' + separator, 'g'), ''); 

Nie najpiękniejszy rozwiązanie, ale działa :-)

Jeśli ktoś zna lepszy sposób osiągnięcia tego celu, nie krępuj się wysłać odpowiedź.

Aktualizacja
Here's pełny numer locale roboczego parser z podobnym podejściem.

+0

Możesz dodać znak '+' przed powrotem do obsady na numer. Kiedy to robię, zazwyczaj też chcę przekonwertować na wartość liczbową –

0

to, co zrobiłem do tej pory, to podejście wielostopniowe, które można zobaczyć w poniższym kodzie. nf to usługa NumberFormat. Ta funkcja przyjmuje sformatowany numer oraz używane locale. Teraz tworzymy komparator dzieląc 10k przez 3, gwarantując w ten sposób separator dziesiętny i tysięczny w ustalonej pozycji. Następnie usuń tysiąc separatorów i wszystkie inne nieliczbowe znaki, takie jak symbole walut. po tym zamieniamy separator dziesiętny na angielski i na koniec zwracamy liczbę odlewu.

uf(number, locale) { 
    let nf = this.nf({}, locale); 
    let comparer = nf.format(10000/3); 

    let thousandSeparator = comparer[1]; 
    let decimalSeparator = comparer[5]; 

    // remove thousand seperator 
    let result = number.replace(thousandSeparator, '') 
    // remove non-numeric signs except -> , . 
     .replace(/[^\d.,-]/g, '') 
    // replace original decimalSeparator with english one 
     .replace(decimalSeparator, '.'); 

    // return real number 
    return Number(result); 
    }