JavaScript中判断为整数的多种方式及保留两位小数的方法


Posted in Javascript onSeptember 09, 2019

一、使用取余运算符判断

任何整数都会被1整除,即余数是0。利用这个规则来判断是否是整数。

function isInteger(obj) {
 return obj%1 === 0
}
isInteger(3) // true
isInteger(3.3) // false 

以上输出可以看出这个函数挺好用,但对于字符串和某些特殊值显得力不从心

isInteger('') // true
isInteger('3') // true
isInteger(true) // true
isInteger([]) // true

对于空字符串、字符串类型数字、布尔true、空数组都返回了true,真是难以接受。对这些类型的内部转换细节感兴趣的请参考:

因此,需要先 判断下对象是否是数字 ,比如加一个typeof

function isInteger(obj) {
 return typeof obj === 'number' && obj%1 === 0
}
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false

嗯,这样比较完美了。

二、使用Math.round、Math.ceil、Math.floor判断

整数取整后还是等于自己。利用这个特性来判断是否是整数,Math.floor示例,如下

function isInteger(obj) {
 return Math.floor(obj) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false

这个直接把字符串,true,[]屏蔽了,代码量比上一个函数还少。

三、通过parseInt判断

function isInteger(obj) {
 return parseInt(obj, 10) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false

很不错,但也有一个缺点

isInteger(1000000000000000000000) // false

竟然返回了false,没天理啊。原因是parseInt在解析整数之前强迫将第一个参数解析成字符串。这种方法将数字转换成整型不是一个好的选择。

四、通过位运算判断

function isInteger(obj) {
 return (obj | 0) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false

这个函数很不错,效率还很高。但有个缺陷,上文提到过,位运算只能处理32位以内的数字,对于超过32位的无能为力,如

isInteger(Math.pow(2, 32)) // 32位以上的数字返回false了

当然,多数时候我们不会用到那么大的数字。

五、ES6提供了Number.isInteger

Number.isInteger(3) // true
Number.isInteger(3.1) // false
Number.isInteger('') // false
Number.isInteger('3') // false
Number.isInteger(true) // false
Number.isInteger([]) // false

目前,最新的 Firefox 和Chrome已经支持。

六、js 输入int类型数字后自动在后面加.00

var getFloatStr = function (num) {
 num += '';
 num = num.replace(/[^0-9|\.]/g, ''); //清除字符串中的非数字非.字符
 if (/^0+/) //清除字符串开头的0
  num = num.replace(/^0+/, '');
 if (!/\./.test(num)) //为整数字符串在末尾添加.00
  num += '.00';
 if (/^\./.test(num)) //字符以.开头时,在开头添加0
  num = '0' + num;
 num += '00'; //在字符串末尾补零
 num = num.match(/\d+\.\d{2}/)[0];
 return num;
 };

如若vue 全局使用 在 main.js

Vue.prototype.getFloatStr = function(num) {
 num += '';
 num = num.replace(/[^0-9|\.]/g, ''); //清除字符串中的非数字非.字符

 if (/^0+/) //清除字符串开头的0
 num = num.replace(/^0+/, '');
 if (!/\./.test(num)) //为整数字符串在末尾添加.00
 num += '.00';
 if (/^\./.test(num)) //字符以.开头时,在开头添加0
 num = '0' + num;
 num += '00'; //在字符串末尾补零
 num = num.match(/\d+\.\d{2}/)[0];
 return num;
}

方法有很多种 例如:

js将小数转为保留两位小数(保留0.00和不保留)

function toDecimal2(x) {
 var f = Math.round(x * 100) / 100;
 var s = f.toString();
 var rs = s.indexOf('.');
 if (rs < 0) {
 rs = s.length;
 s += '.';
 }
 while (s.length <= rs + 2) {
 s += '0';
 }
 return s;
}
//保留2位小数,如:2,还会保留2 不会补0
function toDecimal2NoZero(x) {
 var f = Math.round(x * 100) / 100;
 var s = f.toString();
 return s;
}

总结

以上所述是小编给大家介绍的JavaScript中判断为整数的多种方式及保留两位小数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Javascript 跨域访问解决方案
Feb 14 Javascript
JavaScript 无符号右移运算符
Apr 17 Javascript
20个非常棒的Jquery实用工具 国外文章
Jan 01 Javascript
初窥JQuery(一)jquery选择符 必备知识点
Nov 25 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
Apr 14 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
Mar 28 Javascript
JavaScript比较两个对象是否相等的方法
Feb 06 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 Javascript
JS实现向iframe中表单传值的方法
Mar 24 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 Javascript
javascript删除数组元素的七个方法示例
Sep 09 #Javascript
微信小程序 select 下拉框组件功能
Sep 09 #Javascript
移动端手指操控左右滑动的菜单
Sep 08 #Javascript
swiper Scrollbar滚动条组件详解
Sep 08 #Javascript
js实现移动端tab切换时下划线滑动效果
Sep 08 #Javascript
swiper4实现移动端导航切换
Oct 16 #Javascript
Swiper.js实现移动端元素左右滑动
Sep 08 #Javascript
You might like
E路文章系统PHP
2006/12/11 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
详解vue路由
2020/08/05 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
Python下使用Psyco模块优化运行速度
2015/04/05 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
Python实现常见的回文字符串算法
2018/11/14 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
青年文明号事迹材料
2014/01/18 职场文书
四年大学自我鉴定
2014/02/17 职场文书
研讨会主持词
2014/04/02 职场文书
离婚协议书怎么写
2015/01/26 职场文书
雷锋观后感
2015/06/10 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
导游词之任弼时故居
2020/01/07 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript