Lightweight & Fast JavaScript Number Formatter
MIT License
Lightweight & Fast JavaScript Number Formatter
This standalone number formatter† is intended to be short and fast. As they are the main factors for a high performance JavaScript app. Development release is around 150 lines including license info, blank lines and comments. And production release is less than 2,000 bytes.
format( "#,##0.####", 1234567.890 ); // output: "1,234,567.89"
format( "$ #,###.00", -1234567.890 ); // output: "$ -1,234,567.89"
// Added in v2.0.0
format( "$ #,###.00", -1234567.890, {enforceMaskSign: true}); // output: "$ 1,234,567.89"
format( "$ -#,###.00", -1234567.890, {enforceMaskSign: true}); // output: "$ -1,234,567.89"
format( "$ +#,###.00", -1234567.890, {enforceMaskSign: true}); // output: "$ -1,234,567.89"
format( "$ +#,###.00", 1234567.890, {enforceMaskSign: true}); // output: "$ +1,234,567.89"
† Initial development release of this code was written by KPL and hosted at Google Code.
#,##0.00
or with negation -000.####
.# ##0,00
, #,###.##
, #'###.##
or any type of non-numbering symbol.#,##,#0.000
or #,###0.##
are all valid.##,###,##.#
or 0#,#00#.###0#
are all OK.format( "0.0000", 3.141592)
.$#,##0.00
or #,###.##USD
will not yield expected outcome. Use '$'+format('#,##0.00', 123.45)
or format('#,##0.00', 456.789) + 'USD'
0-9
), dashes (-
), or plus signs (+
).Description | Symbol | Summary |
---|---|---|
Mask symbols | #0123456789+- | Mask symbols used for formatting the value. |
Placeholders | #123456789 | Un-forced digit*; this optional digit will only show if it is required as a placeholder. |
Zero | 0 | Forced digit; the digit will be shown whether or not the digit is relevant to the value. |
Signs | +- | Indicates a positive or negative value; visible depending on the value sign and the enforceMaskSign setting. |
Leftmost | Any non-mask symbol† inside the mask will be set to represent a thousands separator. | |
Rightmost | Any non-mask symbol† inside the mask‡ will be set to represent the decimal separator. | |
Prefix/Suffix | Any non-mask symbol† outside the mask. |
* Non-zero mask digits (1
through 9
) behave the same as the #
.
† Anything not a digit, and not a +
, -
or #
.
‡ In the case where there is a trailing decimal or comma, it will be included in the mask, e.g. #.
or 0,
.
When only one symbol is supplied, the library will always treat that symbol as a decimal. For example, format( '#,###', 1234567.890)
will output 1234567,890
.
To force a single symbol to be used as a separator, add a trailing symbol. In this example, a period is added to the end of the mask - format( '#,###.', 1234567.890)
- resulting in it being used as a decimal and forcing the first symbol to be the separator and return this output: 1,234,567
.
npm install --save number-format.js
A demo/sample page with few examples is provided (demo).
And a jsFiddle was created to aid in testing: https://jsfiddle.net/Mottie/t2etyodx/
View the complete change log here.
ignoreSign
option (modified to enforeceMaskSign
!).ignoreSign
to enforceMaskSign
(default false
).