JavaScript函数parseInt
可用于强制将给定参数转换为整数,无论该参数是字符串,浮点数,数字等。
在JavaScript中,parseInt(1.2)
会产生1
而没有错误,但是,在TypeScript中,它会在编译时抛出错误:
error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
我在这里遗漏了什么,或者是TypeScript的预期行为?
答案 0 :(得分:26)
请勿使用parseInt
执行此操作 - 请使用Math.floor
。
使用parseInt
到floor
数字并不总能产生正确的结果。 parseInt(4e21)
返回4
,而不是4e21
。 parseInt(-0)
返回0
,而不是-0
。
答案 1 :(得分:6)
函数parseInt
确实在第一个参数中需要string
。请检查the documentation。通常,您可以省略第二个radix
参数,然后它将回退到默认值10
。但最安全的是始终将数字系统库添加为第二个参数(通常为10
)。
如果您想将常规值投射到number
,您可以使用Number
函数,就像这样。
var myNumber = Number(myGeneralValue);
答案 2 :(得分:3)
查看输入:
parseInt(string: string, radix?: number): number;
^^^^^^
第一个参数需要是一个字符串。这符合规范:
parseInt (string , radix)
parseInt
函数根据指定的 radix 生成一个整数值,该值由解释 string 参数的内容决定。
在普通的JS中,第一个参数被强制转换为字符串,基于规范中的以下规则:
- 让 inputString 为ToString( string )。
醇>
这就是parseInt(1.2)
的原因。
请注意,规范允许 radix 为undefined
,这与省略它相同,因此签名的radix?: number
部分中存在问号。在这种情况下,当然,它默认为10(除非字符串看起来像0xabc
)。
正如其他答案中所提到的,parseInt
无论如何都不是最好的解决方案,如果你真正想做的是楼层或截断操作。
答案 3 :(得分:2)
为什么在这种情况下你会使用parseInt?只需使用Math.floor
或Math.ceil
即可。 parseInt
期望字符串作为参数而不是数字。因此你的错误
答案 4 :(得分:1)
当Math.floor'之间的负数有不同的表现形式。和' parseInt'。
你应该使用这个: 1.2 | 0
或(1.2).toFixed(0)
答案 5 :(得分:1)
我认为其他人已经在这里给出了很多有效的答案,但在我看来,最简单的方法是在原始值上调用.toString()
,并明确基数:
parseInt((1.2).toString(), 10);
答案 6 :(得分:0)