2015-03-25 4 views
6

Il Intl.NumberFormat (vedi Mozilla's doc) fornisce un bel modo in Javascript per formattare i numeri in una versione locale`s corrente in questo modo:C'è un modo per invertire la formattazione da Intl.NumberFormat in JavaScript

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

Ma Non sono riuscito a trovare un modo per invertire questa formattazione. c'è qualcosa come

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

Grazie per qualsiasi aiuto.

risposta

4

ho trovato una soluzione:

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

non è la soluzione più bella ma funziona :-)

Se qualcuno conosce un modo migliore per raggiungere tale obiettivo, si sentono liberi di inviare la tua risposta.

Aggiornamento
Here's una piena locale di lavoro numero parser con un approccio simile.

+0

È possibile aggiungere un segno '' 'prima del ritorno per eseguire il cast al numero. Quando lo faccio, di solito voglio anche convertirlo in un valore numerico –

0

quello che ho fatto finora è un approccio multi-passo che puoi vedere nel codice qui sotto. nf è il servizio NumberFormat. Questa funzione accetta il numero formattato e le impostazioni locali utilizzate. Ora creiamo un comparatore dividendo 10k per 3 garantendo così un decimale e un migliaio separatore in una posizione fissa. Quindi rimuovere il separatore delle migliaia e tutti gli altri segni non numerici, come i simboli di valuta. successivamente sostituiamo il separatore decimale con quello inglese e infine restituiamo un numero castato.

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); 
    } 
Problemi correlati