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 相关文章推荐
页面中js执行顺序
Nov 09 Javascript
jquery中的sortable排序之后的保存状态的解决方法
Jan 28 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
Aug 11 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
May 14 Javascript
Jquery简单分页实现方法
Jul 24 Javascript
js实现文字垂直滚动和鼠标悬停效果
Dec 31 Javascript
微信小程序 开发指南详解
Sep 27 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
vue 粒子特效的示例代码
Sep 19 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
Jun 10 Javascript
js实现简易计算器小功能
Nov 18 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
PHP文件上传主要代码讲解
2013/09/30 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
php桥接模式应用案例分析
2019/10/23 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
javascript第一课
2007/02/27 Javascript
web 页面分页打印的实现
2009/06/22 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
2019/02/26 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
python os模块简单应用示例
2019/05/23 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
Solaris操作系统的线程机制
2012/12/23 面试题
中专自荐信
2013/10/13 职场文书
机电一体化大学生求职信
2013/11/08 职场文书
业务部经理岗位职责
2014/01/04 职场文书
银行员工辞职信范文
2014/01/20 职场文书
通信研究生自荐信
2014/02/01 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
2014年财政局工作总结
2014/12/09 职场文书
2015年教研组工作总结
2015/05/04 职场文书
表彰大会新闻稿
2015/07/17 职场文书