parseInt无法工作的原因是逗号。您可以使用正则表达式删除逗号,例如:
var num = '1,700.00';
num = num.replace(/\,/g,'');
这将返回一个包含数字的字符串。现在你可以使用parseInt函数。如果你没有选择基数,它将默认为10
,这是在此处使用的正确值。
num = parseInt(num);
在将它们相加之前,对于每个字符串数字都要这样做,这样一切都应该正常工作。
有关替换的更多信息,请参见mdn:
`/` - start
`\,` - escaped comma
`/` - end
`g` - search globally
''
用空字符串替换匹配的部分,从而删除它们。
parseInt 总是四舍五入到最近的整数。如果你需要小数位数,有几个技巧可以使用。这是我最喜欢的:
2 places: `num = parseInt(num * 100) / 100;`
3 places: `num = parseInt(num * 1000) / 1000;`
toFixed()
,它会将数字转换回字符串。 - Fr0zenFyrreplace()
将 ,
替换为 nothing
,然后使用 parseFloat()
转换为浮点数。从OP的变量中可以看出,可能存在小数,因此在这种情况下,parseInt()
可能不起作用(小数点后的数字将被剥离)。replace()
内部使用正则表达式来消除每个出现的 ,
。var a = parseFloat('1,700.00'.replace(/,/g, ''));
var b = parseFloat('500.00'.replace(/,/g, ''));
var sum = a+b;
即使您的数字是小数,例如1,700.55
,这也可以为您提供正确的结果。
如果我按照您问题的标题来看,您需要一个整数。为此,您可以使用parseInt(string, radix)
。它可以在没有radix
的情况下工作,但最好指定它,因为您永远不知道浏览器可能会如何运行(例如,请参见@Royi Namir的注释)。该函数将把字符串四舍五入为最近的整数值。
var a = parseInt('1,700.00'.replace(/,/g, ''), 10); //radix 10 will return base10 value
var b = parseInt('500.00'.replace(/,/g, ''), 10);
var sum = a+b;
parseFloat()
中不需要基数,它将始终返回一个十进制/基础10值。此外,它会在小数点后剥离任何多余的零(例如:17500.50
变成了17500.5
,17500.00
变成了17500
)。如果您需要始终获得2个小数位,请附加另一个函数toFixed(decimal places)
。var a = parseFloat('1,700.00'.replace(/,/g, ''));
var b = parseFloat('500.00'.replace(/,/g, ''));
var sum = (a+b).toFixed(2); //change argument in toFixed() as you need
// 2200.00
toFixed()
,您只需更改参数即可。但请记住,toFixed()
将数字更改回字符串,而不像@EpiphanyMachine的解决方案。所以你得自己判断。function getMeTheNumber(){return 010.toString();}; alert(parseFloat(getMeTheNumber().replace(/,/g, '')))
,这会导致你的代码失败。为什么不指定基数呢?你应该构建健壮的代码。 - Royi NamirtoFixed()
会将数字转换为字符串。因此,对结果进行比较可能无法正常工作。 - Fr0zenFyr试试这个:
parseFloat(a.replace(/,/g, ''));
它也适用于:1,800,300.33
示例:
parseFloat('1,700,800.010'.replace(/,/g, ''))
//1700800.01
1,800,300.33
上工作。使用 parseInt('1,800,300.33'.replace(/,/g,''),10);
,它会变成 1800300
。请参阅我的答案,应该使用parseFloat()
。 - Fr0zenFyrie8
中执行 parseInt('010')
返回的是 8。如果你看到一个洞,不要试图去堵住它,而是绕过它走。 - Royi NamirparseFloat()
,这个规则也适用于它吗?你把它和 parseInt()
搞混了,parseFloat()
不需要第二个参数,只需要小数。如果我错了,请纠正我。 - Fr0zenFyrparseFloat(010)
,则需要它,这是8(即8,见鬼-010 is 8)。这不是OP的情况,因为他的输入是字符串。但是,为了确保所有情况下都正确,指定基数有什么问题呢? - Royi Namira.replace(',', '')
一旦你去掉了逗号,这个字符串就应该可以被顺利解析。
parseFloat
?我认为你无法解析数字1,700.00
,你期望输出哪个数字? - hawk