我想在JavaScript中将浮点数转换为整数。实际上,我想知道如何进行两种标准转换:通过截断和舍入。而且高效,而不是通过转换为字符串和解析。
当前回答
//将浮点数转换为整数数学楼层(5.95)//5数学ceil(5.95)//6数学舍入(5.4)//5数学舍入(5.5)//6数学截断(5.5)//5//快速方法console.log(5.95|0)控制台日志(~~5.95)控制台日志(5.95>>0)//5
其他回答
在您的例子中,当您希望在末尾插入字符串(以便插入逗号)时,也可以只使用Number.toFixed()函数,但这将执行舍入。
如果您使用angularjs,那么简单的解决方案如下HTML模板绑定
{{val |编号:0}}
它会将val转换为整数
通过链接docs.angularjs.org/api/ng/filter/number
这里有很多建议。按位OR似乎是迄今为止最简单的。下面是另一个简短的解决方案,它也可以使用模运算符处理负数。它可能比按位OR更容易理解:
intval = floatval - floatval%1;
此方法也适用于“|0”、“~~”或“>>0”都不能正常工作的高值数字:
> n=4294967295;
> n|0
-1
> ~~n
-1
> n>>0
-1
> n-n%1
4294967295
表演
今天2020.11.28我在Chrome v85、Safari v13.1.2和Firefox v80上对MacOs HighSierra 10.13.6进行了测试,以确定所选的解决方案。
后果
对于所有浏览器,所有解决方案(B和K除外)的速度结果都非常相似解决方案B和K很慢
细节
我执行测试用例,您可以在这里运行
下面的代码片段显示了解决方案之间的差异A.BCDEFGH我JKL
函数A(浮动){return Mathtrunc(浮点);}函数B(浮动){return parseInt(float);}函数C(浮点){返回浮点值|0;}功能D(浮动){return ~~浮点数;}函数E(浮点){返回浮点数>>0;}函数F(浮动){return float-float%1;}函数G(浮动){返回浮点^0;}函数H(浮动){return Math.floor(float);}函数I(浮点){return Math.ceil(浮点);}函数J(浮动){return Math.round(float);}函数K(浮点){return float.toFixed(0);}函数L(浮点){返回浮点>>>0;}// ---------//测试// ---------[A、B、C、D、E、F、G、H、I、J、K、L].forEach(f=>console.log(`${f.name}${f(1.5)}${f(-1.5)}${f(2.499)}${f(-2.499)}`))此代码段仅显示性能测试中使用的函数-它本身不执行测试!
下面是铬的示例结果
要截断:
//Math.ctrunk()是ES6规范的一部分console.log(数学截断(1.5));//返回1console.log(数学截断(-1.5));//返回-1//数学floor(-1.5)将返回-2,这可能不是您想要的
要舍入:
console.log(数学舍入(1.5));//2.console.log(数学舍入(1.49));//1.console.log(数学舍入(-1.6));//-2.console.log(数学舍入(-1.3));//-1.
推荐文章
- 我如何检查如果一个变量是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字符串转换为日期