在不使用四舍五入的情况下在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编号都必须具有双重语义。