格式化带两位小数的数字var [重复]

Posted

技术标签:

【中文标题】格式化带两位小数的数字var [重复]【英文标题】:Formatting number var with two decimal places [duplicate] 【发布时间】:2014-04-22 16:02:31 【问题描述】:

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

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

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

每当我将变量添加在一起时:

totalbox.value = "£" + eventTotal + deliveryTotal;

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

为什么这个数字格式不正确,我该如何实现?

【问题讨论】:

toFixed 返回一个字符串,所以你只是连接字符串。获取总数,然后在结果上调用toFixed 记住Is floating point math broken? 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

最好将所有变量保留为数字,然后通过函数将它们传递给人类可读的货币。

// 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 实体 £ 而不是使用原始符号。

【讨论】:

【参考方案3】:

获取总数并使用

toFixed(2);

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

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

【讨论】:

以上是关于格式化带两位小数的数字var [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何让excel饼图的百分比带两位小数

Pandas-数字前面补0

python format格式化进阶-左对齐右对齐 取位数

在 UILabel 中查看带两位小数的数字 [重复]

C# 怎样把 数字型的字符串 格式化成 两位小数形式的字符串?不足两位小数要补0

3分钟学会Python的format