在不使用四舍五入的情况下在Javascript中将double转换为int

在C#中,以下代码返回2:

double d = 2.9; int i = (int)d; Debug.WriteLine(i); 

然而,在Javascript中,将“double”转换为“int”的唯一方法是使用Math.round / floor / toFixed等。有没有方法可以在不使用舍入的情况下转换为Javascript中的intforms? 我知道Number()的性能影响,所以我宁愿避免将其转换为string,如果可能的话。

使用parseInt()

 var num = 2.9 console.log(parseInt(num, 10)); // 2 

你也可以使用|

 var num = 2.9 console.log(num | 0); // 2 

我发现“parseInt”的build议非常好奇,因为“parseInt”是通过devise对string进行操作的。 这就是为什么它的名字中有“parsing”一词。

一个完全避免函数调用的技巧是

 var truncated = ~~number; 

“〜”一元运算符的双重应用会给你一个截断的双精度值。 然而,这个值被限制在32位精度,就像所有其他JavaScript操作一样,隐含地把数字视为整数(如数组索引和位运算符)。

编辑 – 在一段时间后的更新中,另一个替代技巧就是将值与零进行按位或运算:

 var truncated = number|0; 

只要使用parseInt()并确保包含基数,以便获得可预测的结果:

 parseInt(d, 10); 

Javascript中没有这样的东西。 所有的Numbers实际上是幕后的双打*,所以你不能依靠types系统来为你发出舍入命令,就像你在C或C#中一样。

你不需要担心精度问题(因为双精度正确表示任何2 ^ 53的整数),但是如果你想舍入到最近的整数,你真的被困在使用Math.floor(或其他等价的技巧)。


*大多数JS引擎尽可能使用本地整数,但是所有JS编号都必须具有双重语义。