js 自定义保留小数四舍五入
2016-01-04 18:20
555 查看
谈谈js运算的那些坑,比如:0.1+0.7居然不是等于0.8;toFixed()保留小数位在某些时候居然不是四舍五入的,万恶的一切都源于二进制,因为某些十进制数字用二进制表示是无限循环的,所以才回出现误差,那其他语言为什么不会呢?到底为什么呢.......,其实也是会的,只不过人家已经考虑到这个问题,封装处理而已,最近遇到一个问题,解决toFixed()在保留小数点较多的时候无法四舍五入的问题,所以决定自己写一个函数挂在Number类上,不扯蛋了,上代码:
Number.prototype.myTofixed=function(n){
var n=n||2;//默认保留两位小数
var number=this;
var multipe=Math.pow(10,n); //把一个数放大10的次方倍
if(!isNaN(number)){
number=Math.round(number*multipe);//四舍五入
//处理小数点
number=number.toString().split("");
if(number.length<n+1){//当数值小于1的时候的处理方法
for(var i=0;i<=n+1-number.length;i++){
number.splice(0, 0,"0");
}
}
number.splice(number.length-n, 0,"."); //给一个放大后的数的字符串插入小数点
number=number.join("");
return number
}else{
console.log('myTofixed方法只能对数字使用');
}
}
写好了之后我就开始去测试:
33.123654.myTofixed(4); //33.1237
33.123654.myTofixed(2); //33.12
33.myTofixed(0);//报错,我去,居然报错,这到底是为什么呢?
烧死几万个脑细胞,终于想起来了,js是弱类型语言,没有整形,都是浮点型,所以这样不可以,应该这样调用:33..myTofixed();终于看到美丽冻人的33.00了
前端路上的一枚小菜,欢迎同道中人来切磋!!!!!!!!!!
Number.prototype.myTofixed=function(n){
var n=n||2;//默认保留两位小数
var number=this;
var multipe=Math.pow(10,n); //把一个数放大10的次方倍
if(!isNaN(number)){
number=Math.round(number*multipe);//四舍五入
//处理小数点
number=number.toString().split("");
if(number.length<n+1){//当数值小于1的时候的处理方法
for(var i=0;i<=n+1-number.length;i++){
number.splice(0, 0,"0");
}
}
number.splice(number.length-n, 0,"."); //给一个放大后的数的字符串插入小数点
number=number.join("");
return number
}else{
console.log('myTofixed方法只能对数字使用');
}
}
写好了之后我就开始去测试:
33.123654.myTofixed(4); //33.1237
33.123654.myTofixed(2); //33.12
33.myTofixed(0);//报错,我去,居然报错,这到底是为什么呢?
烧死几万个脑细胞,终于想起来了,js是弱类型语言,没有整形,都是浮点型,所以这样不可以,应该这样调用:33..myTofixed();终于看到美丽冻人的33.00了
前端路上的一枚小菜,欢迎同道中人来切磋!!!!!!!!!!
相关文章推荐
- javascript剔除字符串中的html标签
- JS----table 简单的查找并标注
- js windows.open 调用ajax时被一些浏览器阻止弹出窗体的解决方案
- javascript笔记—— call 简单理解
- 使用google提供的打包好的库解析Json(2)
- 231个web前端的javascript特效分享
- 如何从 Xcode 控制台输出 JavaScript 的 log?
- h5connect.js 腾讯云视频点播使用指南
- JS开发通过设置cookie实现第一次进入首页展示弹窗广告,再次进入隐藏广告
- JavaScript跨域总结与解决办法
- cJSON代码阅读(10)——把数值构造成JSON格式
- javascript语法
- javascript 中的 call
- js将一组为包含重复和无序日期的数组转化为按正常日期顺序排列的一组数组
- cJSON代码阅读(9)——构造json数据的流程
- extjs判断文件后缀的方法
- jq:get获取json数据并以表格形式生成到页面
- extjs读取excel
- extjs传值丢失问题
- JavaScript-switch语句