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 相关文章推荐
jQuery对象和DOM对象相互转化
Apr 24 Javascript
理解Javascript_05_原型继承原理
Oct 13 Javascript
JavaScript初学者建议:不要去管浏览器兼容
Feb 04 Javascript
基于jQuery实现简单的折叠菜单效果
Nov 23 Javascript
深入分析node.js的异步API和其局限性
Sep 05 Javascript
利用Node.JS实现邮件发送功能
Oct 21 Javascript
深入理解Angular.JS中的Scope继承
Jun 04 Javascript
webpack配置导致字体图标无法显示的解决方法
Mar 06 Javascript
vue2.0模拟锚点的实例
Mar 14 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
Jan 24 Javascript
vue跳转方式(打开新页面)及传参操作示例
Jan 26 Javascript
正则表达式基础与常用验证表达式
Jun 16 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
浅析PHP Socket技术
2013/08/02 PHP
php实现文件编码批量转换
2014/03/10 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
js中call与apply的用法小结
2013/12/28 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
聚美优品陈欧广告词
2014/03/14 职场文书
药剂专业自荐书
2014/06/20 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
银行委托书范本
2014/09/28 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL