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类库D
Oct 24 Javascript
自己写的Javascript计算时间差函数
Oct 28 Javascript
深入理解Javascript动态方法调用与参数修改的问题
Dec 10 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
js实现在同一窗口浏览图片
Sep 17 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
使用Require.js封装原生js轮播图的实现代码
Jun 15 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
详解Vue SPA项目优化小记
Jul 03 Javascript
jQuery pjax 应用简单示例
Sep 20 jQuery
vue.js多页面开发环境搭建过程
Apr 24 Javascript
教你使用vscode 搭建react-native开发环境
Jul 07 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维护文件系统
2006/10/09 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
告诉大家什么是JSON
2008/06/10 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
python字符串替换的2种方法
2014/11/30 Python
Python中functools模块的常用函数解析
2016/06/30 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
农民工工资发放承诺书
2014/03/31 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
学校三节实施方案
2014/06/09 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
竞聘书的秘诀
2019/04/02 职场文书