6

Sto tentando di utilizzare il nuovo Javascript internationalization API e vorrei sapere se esiste un modo per ottenere il separatore decimale e il separatore di migliaia (raggruppamento) per un'istanza Intl.NumberFormat?Esiste un modo per ottenere il separatore decimale e miglia in ECMAscript Internationalization API?

C'è un metodo resolvedOptions sull'oggetto, ma questo non fornisce i simboli.

Nel caso in cui qualcuno si chieda, quindi per en-US, questi sarebbero una virgola , e periodo ., ad esempio in 1,000.00.

+0

È possibile utilizzare 'positivePattern'? Se non altro, puoi sempre vedere in che cosa si risolve effettivamente un numero conosciuto. :) – bzlm

+0

@bzlm l'analisi del pattern risolto è un'opzione che ho pensato. Ad esempio, formattando un numero conosciuto, come '1000.50' e verificando il carattere subito dopo il numero' 1' per un separatore di gruppo (in migliaia), e il/i carattere/i tra l'ultimo '0' e subito prima del numero' 5 'per il separatore decimale. – ragulka

+0

Questo è esattamente quello che faccio quando nient'altro è disponibile (ma con 12345.6789). Trovo che di solito funzioni abbastanza bene. – bzlm

risposta

0

Ho paura che lo standard ECMA-402 non definisca l'API che consente di accedere ai separatori. C'è anche un altro problema: al momento l'adozione dell'ECMA-402 non è così ampia come desideriamo.

Pertanto, per il momento, se fossi in te guarderei a qualcosa come CLDR JSON bindings o iLib che apparently provides queste informazioni attraverso LocaleInfo'sgetDecimalSeparator() e getGroupingSeparator() funzioni.
BTW. iLib sembra utilizzare CLDR come fonte di informazioni.

1

Se non altro, come una soluzione trucco (che non superare il test Turchia; si veda il commento), è possibile utilizzare l'uscita di toLocaleString() per determinare le informazioni sulla formattazione di numeri in un locale. Per le impostazioni internazionali correnti, ad esempio:

var decimalSeparator = 
    (12345.6789).toLocaleString().match(/345(.*)67/)[1]; 
var thousandSeparator = 
    (12345.6789).toLocaleString().match(/12(.*)345/)[1]; 
var numberOfDecimals = 
    (12345.6789).toLocaleString().match(/345(\D*)(\d+)$/)[2].length; 

Lo stesso trucco può essere utilizzato per la formattazione della valuta, utilizzando ad es. (12345.6789).toLocaleString("en-GB", { style: "currency" }).

+1

Questo è probabilmente simile all'approccio che userò, ma vale la pena notare che questo probabilmente si romperà con le versioni locali che non stampano 1234 ecc. Ad esempio, usando 'ar' 1234 = 1234 – Andyrooger