Created
March 21, 2013 17:54
-
-
Save kayleg/5215127 to your computer and use it in GitHub Desktop.
Handlebars currency helper and test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Handlebars.registerHelper('currency', function(amount, options) { | |
if (typeof(amount) === 'string') { amount = options.contexts[0].get(amount); } | |
var rounded = Math.round(amount * 100); | |
var dec = rounded % 100; | |
var whole = rounded / 100 - dec / 100; | |
var decStr = '' + dec; | |
return '$' + whole + '.' + decStr + ( decStr.length < 2 ? '0' : ''); | |
}); | |
test("USD", function () { | |
//Fails | |
var t = Handlebars.compile("{{currency 0.1}}"); | |
equal(t(), "$0.10", "Passed in cents"); | |
//Passes | |
var t = Handlebars.compile("{{currency amount}}"); | |
equal(t({amount: 0.15}), "$0.15", "Passed in key"); | |
}); |
Once you have the amount you could just use built-in javascript methods to format the currency. Something like:
var num = new Number(amount);
var formattedNumber = num.toLocaleString('en-US', {style: 'currency', currency: 'USD'});
// Example
// amount: 2000.345
// output: $2,000.35
@lazamar JSHint complains about using the Number
constructor (since it's type is object
instead of number
). toLocaleString
is available on primitives though: var x = 100; x.toLocaleString(...);
However it is not supported on all browsers, most notably Safari on iOS; it returns the original value.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This function misinterprets cents when passing in an amount with 01 - 09 cents (ex 10.05 will output as "$10.50"). Try: