Formattatore di numeri
Formatta i numeri con virgole, abbreviazioni, simboli di valuta e decimali personalizzati.
Come funziona
- Inserisci il tuo numero: digita o incolla un valore numerico, interi, decimali, grandi numeri o notazione scientifica.
- Scegli le opzioni di formato: seleziona la tua locale (US, EU, ecc.), il numero di decimali, il separatore di raggruppamento e il simbolo di valuta se necessario.
- Copia il risultato formattato: il numero viene mostrato nel formato scelto all'istante. Copialo per usarlo in report, documenti o esportazioni.
Perché usare il formattatore di numeri?
I numeri significano cose diverse a seconda delle locali. Gli Stati Uniti scrivono mille come 1,000.00 mentre molti paesi europei lo scrivono 1.000,00. Copiare numeri grezzi tra sistemi causa errori di parsing, errori di lettura ed errori finanziari. Il formattatore di numeri garantisce che i tuoi numeri si visualizzino correttamente per qualsiasi pubblico, preparazione di report finanziari, localizzazione di contenuti o pulizia di dati per la presentazione.
Funzionalità
- Formattazione adattata alla locale: supporta i formati US, EU e internazionali con separatori decimali e di raggruppamento corretti.
- Controllo della precisione dei decimali: definisci esattamente quanti decimali visualizzare.
- Raggruppamento delle migliaia: aggiungi o rimuovi i separatori delle migliaia con un clic.
- Formattazione di valuta: aggiungi un prefisso simbolo di valuta e formatta come valore monetario.
- Notazione scientifica: converti da o verso la notazione scientifica per numeri molto grandi o molto piccoli.
Domande frequenti
Qual è la differenza tra il formato numerico US ed europeo?
Negli Stati Uniti, il separatore decimale è un punto (.) e il separatore delle migliaia è una virgola (,), per es. 1,234.56. Nella maggior parte dell'Europa, è il contrario: 1.234,56. Questo strumento converte correttamente tra i due formati.
Posso formattare numeri per valute?
Sì. Attiva la modalità valuta e scegli un simbolo ($ € £ ¥, ecc.) da anteporre come prefisso al numero formattato. Per formati contabili con convenzioni di numeri negativi, attiva la modalità contabile.
Gestisce numeri molto grandi o molto piccoli?
Sì. Il formattatore gestisce numeri a più cifre e può visualizzarli in notazione standard, raggruppata o scientifica. La precisione in virgola mobile è applicata ai decimali configurati.
Da dove vengono gli standard di formattazione dei numeri
I formati numerici che vedi oggi nel software sono definiti da una piccola pila di standard che ha impiegato trent'anni per consolidarsi. IEEE 754 (1985), rivista nel 2008 e 2019, ha fissato il layout binario dei numeri in virgola mobile: 64 bit divisi in 1 segno, 11 esponente, 52 mantissa, che è ciò che ogni numero JavaScript è sotto il cofano. ISO 4217 (1978, edizione attuale 2015) ha definito i codici valuta a tre lettere, USD, EUR, JPY, INR, BRL, e quante unità minori ciascuno ha (2 per USD, 0 per JPY, 3 per KWD, 4 per CLF). Il Unicode CLDR (Common Locale Data Repository), pubblicato per la prima volta nel 2003, è il dataset aperto che registra separatori di gruppo, separatori decimali, simboli valuta e regole plurali per ogni locale; rilascio attuale è CLDR 46 (ottobre 2024). ECMA-402 (2012), l'API di Internazionalizzazione ECMAScript, ha dato a JavaScript un legame nativo a quei dati tramite Intl.NumberFormat, supportato da ICU (International Components for Unicode) in V8, JavaScriptCore e SpiderMonkey. Insieme questi quattro spec fanno sì che (1234567).toLocaleString('de-DE') restituisca 1.234.567 invece di 1,234,567.
I sei pattern di locale che incontrerai
La maggior parte dei formati numerici in natura cadono in sei pattern. Memorizzare questi sei copre ~95% della base utenti di qualsiasi prodotto globale.
- en-US, en-GB, ja-JP, zh-CN, ko-KR, gruppo virgola, decimale punto:
1,234,567.89. - de-DE, es-ES, it-IT, nl-NL, pt-BR, gruppo punto, decimale virgola:
1.234.567,89. Attenzione a incollarlo in un foglio di calcolo statunitense. - fr-FR, ru-RU, sv-SE, pl-PL, gruppo spazio stretto senza interruzione (Unicode U+202F), decimale virgola:
1 234 567,89. Il separatore non è uno spazio regolare; copiare e incollare attraverso sistemi che normalizzano gli spazi lo corromperà. - de-CH, gruppo virgoletta singola destra (U+2019), decimale punto:
1’234’567.89. La Svizzera è unica qui. - en-IN, hi-IN, gruppo virgola, decimale punto, ma il raggruppamento è 2-2-3 invece di 3-3-3:
12,34,567.89. Questo riflette il sistema lakh/crore: 1 lakh = 10⁵, 1 crore = 10⁷. - ar-EG, ar-SA, cifre arabo-indiane (٠١٢٣٤٥٦٧٨٩), decimale arabo U+066B, separatore migliaia arabo U+066C:
١٬٢٣٤٬٥٦٧٫٨٩. La maggior parte degli ambienti di sviluppo arabofoni usa cifre latine internamente e cambia solo per la visualizzazione.
Modalità di arrotondamento, cosa fanno davvero
ECMA-402 (2023) ha aggiunto nove modalità di arrotondamento a Intl.NumberFormat. La scelta cambia totali finanziari, rapporti scientifici e calcoli fiscali. Tre contano di più in pratica.
halfExpand(default). 2,5 arrotonda a 3, −2,5 arrotonda a −3. Questo è l'arrotondamento che tutti hanno imparato a scuola e il default JavaScript.halfEven(arrotondamento del banchiere). 2,5 arrotonda a 2, 3,5 arrotonda a 4, i pareggi vanno sempre alla cifra pari. Richiesto da IEEE 754 per aritmetica in virgola mobile. Usato in tabelle fiscali USA, computazione scientifica e sistemi contabili principali per rimuovere un piccolo bias sistematico chehalfExpandintroduce su milioni di arrotondamenti.trunc. Scarta tutto dopo il taglio senza arrotondamento. 2,9 a 2, −2,9 a −2. Usato quando letteralmente vuoi scartare precisione, mai per soldi.- Gli altri sei (
ceil,floor,expand,halfCeil,halfFloor,halfTrunc) gestiscono casi specializzati come arrotondare sempre per eccesso per costi di spedizione o sempre per difetto per sconti fiscali. Scegli deliberatamente, non accettare il default se sono in gioco soldi o conformità.
Dove questo strumento si guadagna lo stipendio
- Rapporti finanziari. Formatta ricavi, spese, rapporti per presentazioni. Alterna tra formati US e EU per corrispondere al paese del pubblico.
- Verifica locale del tuo negozio. Digita un prezzo nel formato desiderato e verifica che corrisponda a ciò che il tuo sito e-commerce mostra a un cliente in Germania o India.
- Preparazione CSV. Converti righe tedesche
1.234,56in US1234.56prima di importare in un foglio che si aspetta decimale punto, o viceversa. - Formattazione rupia indiana. Trasforma 12.500.000 in 1,25,00,000 (1,25 crore) per pubblico sud-asiatico. La maggior parte degli strumenti USA non lo fa.
- Visualizzazione compatta per dashboard. Trasforma 1.234.567 in
1.23Mper widget dove lo spazio orizzontale è ristretto. La notazione compatta è anche locale-aware: il tedesco mostra1,23 Mio. - Simbolo valuta come prefisso. Aggiungi $, €, £, ¥, ₹ nella posizione corretta per ogni locale, il dollaro USA sta davanti, l'euro tedesco sta dietro.
- Escape notazione scientifica Excel. Grandi ID incollati come gli snowflake di Twitter vengono convertiti in
1.23E+18e perdono precisione. Formattali con raggruppamento più apostrofo iniziale prima di incollare in modo che Excel li tratti come testo.
Errori che mordono anche sviluppatori esperti
- Aritmetica in virgola mobile sui soldi.
0.1 + 0.2 === 0.30000000000000004in ogni linguaggio IEEE 754, non solo JavaScript. Memorizza la valuta come unità minori intere (centesimi) o usa una libreria decimale comedecimal.js. La formattazione nasconde l'errore, non lo risolve. - Parsing ingenuo di stringhe locale.
parseFloat("1,234.56")restituisce1, non1234.56.parseFloat("1.234,56")restituisce1.234. Per analizzare un numero formattato per locale, rimuovi i separatori di gruppo poi sostituisci il segno decimale, idealmente guidato daIntl.NumberFormat(locale).formatToParts(). - Perdita di precisione su interi grandi. Interi sopra
2⁵³ − 1 = 9 007 199 254 740 991perdono silenziosamente precisione quando memorizzati comenumber. ID Twitter, ID Stripe, hash di transazioni blockchain superano tutti questo. Riceveli come stringhe o usaBigInt;Intl.NumberFormataccetta BigInt nativamente. - Unità minori in stile Stripe. Stripe invia
amount: 499per $4.99. Dividi per 100 (o per il conteggio unità minori ISO 4217 per la valuta) prima di formattare. JPY, KRW, VND, ISK, HUF usano 0 unità minori, nessuna divisione necessaria. - L'input percentuale è una frazione.
new Intl.NumberFormat('en', {style: 'percent'}).format(0.5)restituisce50%, non0.5%. Moltiplica il tuo valore memorizzato per 0,01 prima di formattare se l'hai memorizzato come percentuale. - Costruire NumberFormat in un loop caldo. Ogni chiamata costruttore carica dati locale ICU. Riusa una singola istanza tra le chiamate: 1M di formattazioni con un'istanza memorizzata richiede ~60 ms in V8, ~3 s se costruisci nuovo ogni volta.
- JPY con due decimali.
¥1000.00è sbagliato perché JPY ha 0 unità minori. ImpostaminimumFractionDigits: 0, maximumFractionDigits: 0per JPY, KRW, VND, ISK, HUF, CLP.
Altre domande frequenti
Perché 0,1 + 0,2 non è uguale a 0,3?
Perché i float binari IEEE 754 non possono memorizzare la frazione decimale 0,1 esattamente, nello stesso modo in cui la base 10 non può memorizzare 1/3 esattamente. Il double a 64 bit più vicino a 0,1 è circa 0,1000000000000000055511151231257827021181583404541015625. Sommare due tali approssimazioni produce un risultato che si arrotonda a 0,30000000000000004 invece di 0,3. Ogni linguaggio IEEE 754 ha questo comportamento: Java, Python, C++, Swift, tutti. Per aritmetica decimale esatta, usa centesimi interi o una libreria come decimal.js / Decimal di Python / BigDecimal di Java.
Qual è la differenza tra Intl.NumberFormat e toLocaleString?
Stesso motore, ergonomia diversa. (1234.5).toLocaleString('de-DE', {style: 'currency', currency: 'EUR'}) e new Intl.NumberFormat('de-DE', {style: 'currency', currency: 'EUR'}).format(1234.5) producono output identico. La differenza: Intl.NumberFormat è riutilizzabile, quindi se formatti molti numeri con le stesse opzioni, istanzia una volta e memorizza in cache. toLocaleString legge le opzioni del costruttore ad ogni chiamata ed è drammaticamente più lento in loop stretti.
Come funziona il sistema di numerazione indiano?
L'inglese indiano e l'hindi raggruppano cifre in pattern 2-2-3 invece di 3-3-3: le tre cifre più a destra, poi gruppi di due. 100.000 si scrive 1,00,000 e si chiama un lakh (10⁵). 10.000.000 si scrive 1,00,00,000 e si chiama un crore (10⁷). Intl.NumberFormat('en-IN').format(12345678) restituisce 1,23,45,678. Il sistema si estende a arab (10⁹) e kharab (10¹¹) anche se sono rari nell'uso moderno.
Quanto grande un numero può gestire questo strumento?
Fino a Number.MAX_SAFE_INTEGER = 2⁵³ − 1 = 9.007.199.254.740.991, qualsiasi intero sopravvive a un round-trip esattamente. Oltre, la precisione inizia a perdere. JSON.parse("9007199254740993") restituisce 9007199254740992, il double rappresentabile più vicino. Per valori più grandi, incollali come letterali BigInt (con una n finale) o trattali come stringhe. Il formattatore accetta entrambi.
Il mio numero viene inviato da qualche parte?
No. Intl.NumberFormat e i dati locale sono spediti con il tuo browser; l'intera pipeline gira localmente. Apri la scheda Rete in DevTools e formatta un numero, vedrai zero richieste in uscita. Sicuro per stipendi, ricavi, saldi conto, o qualsiasi dato che non incolleresti in un servizio ospitato.