格式化数字var有两个小数位

时间:2014-04-22 16:02:31

标签: javascript

我有以下带有两个变量的javascript代码:

eventTotal = eventTotal + parseFloat(currentElement.title).toFixed(2);

deliveryTotal = deliveryTotal + parseFloat(currentElement.title).toFixed(2);

每当我使用:

将变量加在一起时
totalbox.value = "£" + eventTotal + deliveryTotal;

输出通常类似于“£055.0003.99”。

为什么这个号码没有正确格式化,我该如何实现呢?

3 个答案:

答案 0 :(得分:4)

toFixed返回一个字符串,而不是一个数字。因此,为了进行添加而不是连接(使用+),您必须将值转换回数字:

totalbox.value = "£" + (parseFloat(eventTotal) + parseFloat(deliveryTotal)).toFixed(2);

FWIW:您可以使用带前缀的+作为parseFloat的快捷方式:

totalbox.value = "£" + (+eventTotal + +deliveryTotal).toFixed(2);

答案 1 :(得分:1)

每个人都指出了由.toFixed()返回字符串引起的问题,但所有这些重复调用parseFloat()toFixed()和强制转换都是code smell。< / p>

最好将所有变量保存为数字,然后将它们传递给函数以格式化为人类可读的货币。

// convert to currency
function currencyFormat(amount){
    return '&pound;' + (amount*1).toFixed(2);
}

// cast to a number in one place
eventTotal =  eventTotal*1;
deliveryTotal = deliveryTotal*1;

// now work with the variables however you need, knowing that you always have numbers

// output currency
totalbox.value = currencyFormat(eventTotal + deliveryTotal);
eventbox.value = currencyFormat(eventTotal);

现在,如果您需要更改货币符号,或者您想更改小数点分隔符或小数位数,则可重复使用代码中的一个更改。此外,您应该使用HTML实体&pound;而不是使用原始符号。

答案 2 :(得分:0)

获取总数并使用

toFixed(2);

eventTotal = (eventTotal + parseFloat(currentElement.title)).toFixed(2);

deliveryTotal = (deliveryTotal + parseFloat(currentElement.title)).toFixed(2);