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调试技巧解决样式问题的步骤分享
Mar 15 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
Mar 13 Javascript
JS实现网页上随滚动条滚动的层效果代码
Nov 04 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
Sep 04 Javascript
微信小程序 在线支付功能的实现
Mar 14 Javascript
javascript自定义事件功能与用法实例分析
Nov 08 Javascript
js提取中文拼音首字母的封装工具类
Mar 12 Javascript
vuex 的简单使用
Mar 22 Javascript
egg.js的基本使用和调用数据库的方法示例
May 18 Javascript
vue elementUI 表单校验功能之数组多层嵌套
Jun 04 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
Jun 11 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多线程类及用法实例
2014/12/03 PHP
Yii使用技巧大汇总
2015/12/29 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
php报错502badgateway解决方法
2019/10/11 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
python xpath获取页面注释的方法
2019/01/14 Python
Django组件cookie与session的具体使用
2019/06/05 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
运动会800米加油稿
2014/02/22 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
寄语是什么意思
2014/04/10 职场文书
学校校庆演讲稿
2014/05/22 职场文书
婚礼答谢礼品
2015/01/20 职场文书
服务员岗位职责范本
2015/04/09 职场文书
义诊活动通知
2015/04/24 职场文书
电影焦裕禄观后感
2015/06/09 职场文书