我有以下带有两个变量的javascript代码:
eventTotal = eventTotal + parseFloat(currentElement.title).toFixed(2);
deliveryTotal = deliveryTotal + parseFloat(currentElement.title).toFixed(2);
每当我使用:
将变量加在一起时totalbox.value = "£" + eventTotal + deliveryTotal;
输出通常类似于“£055.0003.99”。
为什么这个号码没有正确格式化,我该如何实现呢?
答案 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 '£' + (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实体£
而不是使用原始符号。
答案 2 :(得分:0)
获取总数并使用
toFixed(2);
eventTotal = (eventTotal + parseFloat(currentElement.title)).toFixed(2);
deliveryTotal = (deliveryTotal + parseFloat(currentElement.title)).toFixed(2);