【问题标题】:Formatting numbers for commas and decimal places with Javascript [duplicate]使用Javascript格式化逗号和小数位的数字[重复]
【发布时间】:2015-07-18 10:45:25
【问题描述】:

我正在尝试使用 javascript 创建一个函数,该函数显示所有带两位小数的数字,并每三位添加逗号(1,000 10,000 100,000 等)。

一开始我是这样的:

var formatNumber = function(num) {
    return parseFloat((num).toFixed(2)).toLocaleString();
};

这很有效,但有一个例外。

1.2 != 1.20 在最终输出中。它只是显示为 1.2

但其他一切都很好。 124.5879697 = 124.59、10000 = 10,000 和 10586.357 = 10,586.36

问题是最终输出将显示为货币,因此将 10000 显示为 $10,000 就可以了。但是将 1.2 显示为 $1.2 看起来有点不对劲。

为了解决这个问题,我尝试添加以下修改:

var formatNumber = function(num) {
   return parseFloat((Math.round(num*100)/100)).toFixed(2).toLocaleString();
};

这会将所有内容精确到小数点后两位,这很好,但它似乎已停用 toLocaleString,因为现在没有显示逗号。

我希望使用纯 Javascript 而不是 jQuery。关于这个主题似乎有很多关于一个或另一个问题的js问题,但没有将两者结合起来。

谢谢。

【问题讨论】:

  • 你能测试看看小数点后有多少个数字,如果只有一个,在它的末尾加一个 0 吗?
  • 如果小数点后有单个数字,请尝试使用此正则表达式附加 0:parseFloat((num).toFixed(2)).toLocaleString().replace(/\.([0-9])$/, ".$10")

标签: javascript


【解决方案1】:

这似乎有效

var formatNumber = function(num) {
    return parseFloat(num).toFixed(2).toLocaleString();
};

【讨论】:

  • 这不适用于整数。看到这个fiddle
  • @KenGregory 不想成为死灵法师,但您将toFixed() 放在了parseFloat() 中,这就是您失败的原因。如果你把它移到外面,它工作得很好,你也可以取消replaceForked fiddle.
  • @DanAtkinson 谢谢!我逾期向 Katya Pavlenko 道歉 - 我错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 2015-10-08
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
相关资源
最近更新 更多