如何在数字中应用千位分隔符并将其作为数字本身?
Posted
技术标签:
【中文标题】如何在数字中应用千位分隔符并将其作为数字本身?【英文标题】:How to apply thousand seperator in a number and get it as a number itself? 【发布时间】:2015-08-10 12:53:50 【问题描述】:我不知道这个问题是否重复,因为我找不到适合我的案例的解决方案。
我有一个数字,比如 12345,我想应用千位分隔符作为逗号(,),代码是
12345.toString().replace(/\B(?=(\d3)+(?!\d))/g, ",");
我得到了 12,345 个字符串。我想要它作为一个数字。
如果我使用“Number()”或“parseFloat()”,它将以 NaN 形式出现。我不知道如何将带有千位分隔符的字符串转换为带有千位分隔符的数字
我的情况有什么解决办法吗?
【问题讨论】:
号码不能包含,
一个“带有千位分隔符的数字” 不存在。数字只是一个数字(更准确地说,它的域是 IEEE754 双精度定义的域)。你的具体目标是什么?
delimiters 将数字作为字符串。就是这样。
@Thinker:我们甚至不真正了解您的问题是什么。为什么要将数字转换为千位分隔的字符串并返回?为什么不直接使用您已有的号码12345
?
嗨@Thinker,如果你想在公式/计算中使用数值12345,你不需要逗号,对吗?而且,如果您希望将逗号放在其中以用于显示目的,那么带有逗号的字符串不会满足您的需求吗?我认为在这一点上有些混乱。
【参考方案1】:
常见的解决方法是写一个加逗号的函数:
//copied from http://***.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript
function numberWithCommas(x)
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d3)+(?!\d))/g, ",");
return parts.join(".");
更好的解决方案可能是覆盖默认的 toString() 方法,这样您就不必在每次计算时来回转换它:
Number.prototype.toString = function numToString()
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d3)+(?!\d))/g, ",");
return parts.join(".");
您可以像处理任何普通数字一样分配和操作该数字,但在您打印时会添加逗号。
【讨论】:
覆盖toString
对我来说听起来不是一个好主意。它可能会破坏期望toString
返回有效数字的东西。我宁愿在原型中添加一个新功能。
...更不用说您的覆盖函数不起作用(x
未定义)以上是关于如何在数字中应用千位分隔符并将其作为数字本身?的主要内容,如果未能解决你的问题,请参考以下文章