Avevo sostanzialmente lo stesso requisito e ho scoperto che non esiste un meccanismo incorporato per questa funzionalità.
Oltre a tagliare gli zeri finali, ho anche avuto la necessità di arrotondare e formattare l'output per la locale corrente dell'utente (ovvero 123.456.789).
Tutto il mio lavoro su questo è stato incluso come prettyFloat.js (con licenza MIT) su GitHub: https://github.com/dperish/prettyFloat.js
Esempi di utilizzo:
prettyFloat(1.111001, 3) // "1.111"
prettyFloat(1.111001, 4) // "1.111"
prettyFloat(1.1111001, 5) // "1.1111"
prettyFloat(1234.5678, 2) // "1234.57"
prettyFloat(1234.5678, 2, true) // "1,234.57" (en-us)
Aggiornato - agosto 2018
Tutti i browser moderni ora supportano l' API di internazionalizzazione ECMAScript , che fornisce il confronto di stringhe sensibili al linguaggio, la formattazione dei numeri e la formattazione di data e ora.
let formatters = {
default: new Intl.NumberFormat(),
currency: new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 }),
whole: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 }),
oneDecimal: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 1, maximumFractionDigits: 1 }),
twoDecimal: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 2, maximumFractionDigits: 2 })
};
formatters.twoDecimal.format(1234.5678); // result: "1,234.57"
formatters.currency.format(28761232.291); // result: "$28,761,232"
Per i browser meno recenti, è possibile utilizzare questo polyfill: https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en
1.234000 === 1.234
.