Javascript将字符串转换为整数

时间:2014-03-12 07:41:04

标签: javascript

我只是把我的脚趾插入混乱的javascript世界,更多的是出于必然而非欲望,我遇到了添加两个整数的问题。

  

1,700.00 + 500.00

     

返回1,700.00500.00

因此经过一些研究后,我发现1,700.00被视为字符串,我需要转换它。

我为解决此问题而阅读的最相关的网页是this questionthis page。但是当我使用

parseInt(string, radix)

它返回1.我使用了错误的函数或不正确的基数(说实话我无法理解我如何决定使用哪个基数)。

var a="1,700.00";
var b=500.00;
parseInt(a, 10); 

4 个答案:

答案 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

全局搜索将查找所有匹配(如果没有此匹配,它将在第一场比赛后停止)
''用空字符串替换匹配的部分,基本上删除它们。

正则表达式

  • 测试正则表达式的一个很好的工具:Rubular以及mdn
  • 的更多信息
  • 如果您正在寻找一个好的教程here is one

ParseInt和Rounding,parseFloat

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.517500.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(',', '')

一旦你删除了逗号,就应该解析字符串没有问题。