我只是把我的脚趾插入混乱的javascript世界,更多的是出于必然而非欲望,我遇到了添加两个整数的问题。
1,700.00 + 500.00
返回1,700.00500.00
因此经过一些研究后,我发现1,700.00被视为字符串,我需要转换它。
我为解决此问题而阅读的最相关的网页是this question和this page。但是当我使用
时 parseInt(string, radix)
它返回1.我使用了错误的函数或不正确的基数(说实话我无法理解我如何决定使用哪个基数)。
var a="1,700.00";
var b=500.00;
parseInt(a, 10);
答案 0 :(得分:3)
试试这个:
parseFloat(a.replace(/,/g, ''));
它也适用于:1,800,300.33
示例:
parseFloat('1,700,800.010'.replace(/,/g, ''))
//1700800.01
答案 1 :(得分:3)
parseInt无法正常工作的原因是逗号。您可以使用正则表达式删除逗号,例如:
var num = '1,700.00';
num = num.replace(/\,/g,'');
这将返回一个带有数字的字符串。现在你可以解析了。如果你没有选择基数,它将默认为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;`
有关parseInt的更多信息,请查看mdn。
如果您不想舍入,也可以使用parseFloat。我假设你做了,因为标题被转换为整数。一个很好的例子是由@ fr0zenFry在下面写的。他指出parseFloat也没有采用基数,所以它始终在base10中。有关详细信息,请参阅mdn。
答案 2 :(得分:3)
尝试使用replace()
将,
替换为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()
中不需要基数,它将始终返回decimal / base10值。此外,它将在小数点后的末尾剥离任何额外的零(例如: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
另一种替代方法是由@EpiphanyMachine提供,它需要你乘以然后将每个值除以100
。如果您希望将来更改小数位,则可能会出现问题,您必须更改每个变量的乘法/除法因子。使用toFixed()
,您只需更改参数即可。但请记住toFixed()
将数字改回更改为字符串,与@EpiphanyMachine解决方案不同。所以你将成为自己的判断。
答案 3 :(得分:0)
Javascript不懂逗号。像这样删除它:
a.replace(',', '')
一旦你删除了逗号,就应该解析字符串没有问题。