我想在JavaScript中将浮点数转换为整数。实际上,我想知道如何进行两种标准转换:通过截断和舍入。而且高效,而不是通过转换为字符串和解析。
当前回答
还有一种可能的方法-使用XOR运算:
console.log(12.3^0);//12console.log(“12.3”^0);//12console.log(1.2+1.3^0);//2.console.log(1.2+1.3*2^0);//3.console.log(-1.2^0);//-1.console.log(-1.2+1^0);//0console.log(-1.2-1.3^0);//-2.
按位运算的优先级低于数学运算的优先级,这很有用。试穿https://jsfiddle.net/au51uj3r/
其他回答
您可以使用parseInt方法进行无舍入。由于0x(十六进制)和0(八进制)前缀选项,请小心用户输入。
var intValue = parseInt(floatValue, 10);
编辑:作为警告(来自注释部分),请注意某些数值将被转换为指数形式,如1e21,这将导致“1”的十进制表示不正确
注意:不能使用Math.floor()代替truncate,因为Math.floof(-3.1)=-4而不是-3!!
truncate的正确替换为:
function truncate(value)
{
if (value < 0) {
return Math.ceil(value);
}
return Math.floor(value);
}
双位not运算符可用于截断浮点数。您提到的其他操作可通过Math.floor、Math.ceil和Math.round获得。
> ~~2.5
2
> ~~(-1.4)
-1
更多细节由詹姆斯·帕多尔西提供。
这里有很多建议。按位OR似乎是迄今为止最简单的。下面是另一个简短的解决方案,它也可以使用模运算符处理负数。它可能比按位OR更容易理解:
intval = floatval - floatval%1;
此方法也适用于“|0”、“~~”或“>>0”都不能正常工作的高值数字:
> n=4294967295;
> n|0
-1
> ~~n
-1
> n>>0
-1
> n-n%1
4294967295
在您的例子中,当您希望在末尾插入字符串(以便插入逗号)时,也可以只使用Number.toFixed()函数,但这将执行舍入。
推荐文章
- 我如何检查如果一个变量是JavaScript字符串?
- 如何检测如果多个键被按下一次使用JavaScript?
- 如何通过history. pushstate获得历史变化的通知?
- 使用jQuery改变输入字段的类型
- 在JavaScript中,什么相当于Java的Thread.sleep() ?
- 使用jQuery以像素为整数填充或边距值
- 检查是否选择了jQuery选项,如果没有选择默认值
- Next.js React应用中没有定义Window
- 如何重置笑话模拟函数调用计数之前,每次测试
- 如何强制一个功能React组件渲染?
- 在javascript中从平面数组构建树数组
- 将Dropzone.js与其他字段集成到现有的HTML表单中
- 如何在AngularJS中观察路由变化?
- JavaScript DOM删除元素
- 将dd-mm-yyyy字符串转换为日期