I know this has been solved before, but here's my solution just for fun:
function formatDollar(num) {
var p = num.toFixed(2).split(".");
return ["$", p[0].split("").reverse().reduce(function(acc, num, i) {
return num + (i && !(i % 3) ? "," : "") + acc;
}, "."), p[1]].join("");
}
And some tests:
formatDollar(45664544.23423) // "$45,664,544.23"
formatDollar(45) // "$45.00"
formatDollar(123) // "$123.00"
formatDollar(7824) // "$7,824.00"
formatDollar(1) // "$1.00"
formatDollar(939,009) // ?
function formatDollar(num) {
var p = num.toFixed(2).split(".");
return ["$", p[0].split("").reverse().reduce(function(acc, num, i) {
return num + (i && !(i % 3) ? "," : "") + acc;
}, "."), p[1]].join("");
}
const tests = [
{
input: 45664544.23423,
expected: "$45,664,544.23"
},
{
input: 45,
expected: "$45.00"
},
{
input: 123,
expected: "$123.00"
},
{
input: 7824,
expected: "$7,824.00"
},
{
input: 1,
expected: "$1.00"
},
{
input: -939009,
expected: "-$939,009.00"
}
]
tests.forEach(test => {
const { input, expected } = test
const actual = formatDollar(input)
if (expected !== actual) {
console.log(`Failed: ${input}. Expected ${expected}; actual: ${actual}`)
} else {
console.log(`Passed: ${input}`)
}
})