js实现四舍五入Math.round与toFixed的比较

摘要:
11、toFixed2vartotal=12.345;3//四舍五入,保留两位小数4vartwoPoint=total.toFixed(2);//括号中的num即为保留的位数5console.log(twopoint);//12.3567但是,toFixed有bug;8如:total=12.045;9twoPoint=total.toFixed(2);10console.log(twoPoint)
1 1、toFixed
2 var total = 12.345; 3 //四舍五入,保留两位小数 4 var twoPoint = total.toFixed(2); //括号中的num即为保留的位数 5 console.log(twopoint); //12.35 6 7 但是,toFixed有bug; 8 如: total = 12.045; 9 twoPoint = total.toFixed(2); 10 console.log(twoPoint); //结果为12.04 ,按理论来说这个值应该是12.05
可以重写tofixed方法(非原创):
Number.prototype.toFixed = function(length)
{
var carry = 0; //存放进位标志
var num,multiple; //num为原浮点数放大multiple倍后的数,multiple为10的length次方
var str = this + ''; //将调用该方法的数字转为字符串
var dot = str.indexOf("."); //找到小数点的位置
if(str.substr(dot+length+1,1)>=5) carry=1; //找到要进行舍入的数的位置,手动判断是否大于等于5,满足条件进位标志置为1
multiple = Math.pow(10,length); //设置浮点数要扩大的倍数
num = Math.floor(this * multiple) + carry; //去掉舍入位后的所有数,然后加上我们的手动进位数
var result = num/multiple + ''; //将进位后的整数再缩小为原浮点数
/*
* 处理进位后无小数
*/
dot = result.indexOf(".");
if(dot < 0){
result += '.';
dot = result.indexOf(".");
}
/*
* 处理多次进位
*/
var len = result.length - (dot+1);
if(len < length){
for(var i = 0; i < length - len; i++){
result += 0;
}
}
return result;
}
122、Math.round()
13     var total = 12.355;
14     //保留两位小数
15     var twoPoint = Math.round(total * 100)/100;
16     console.log(twoPoint);        //12.36
17     
18     Math.round实现四舍五入取整,如果想保留小数,可以先乘 num 再除以 num 的方式来保留小数;
但是,这种方法有时候也有问题;例如:
total = 9006.425;
twoPoint = Math.round(total * 100) /100;
console.log(twoPoint);      //结果为9006.42, 应该为9006.43

免责声明:文章转载自《js实现四舍五入Math.round与toFixed的比较》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux 修改时区不生效为移动端网页构造快速响应按钮下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

原生js和vue之间的数据通讯--EventEmitter

有个小项目在原来原生的框架编写,但是不想写原生,就引入了vue 然后有个需求要和原生的js进行交互通讯,于是就可以用node.js EventEmitter 具体做法: 先引入文件<script src="http://t.zoukankan.com/js/eventEmitter.js"></script>, 初始化, 然后在vu...

爬取js加密和混淆的例子

作业讲解:js逆向 概述 url:https://nyloner.cn/proxy 需求:将这个网页中的代理ip和端口号进行爬取 难点: 动态变化的请求参数 js加密 需要js逆向 分析 爬取的数据是动态加载 并且我们进行了抓包工具的全局搜索,没有查找到结果 意味着:爬取的数据从服务端请求到的是加密的密文数据 页面每10s刷新一次,刷新后...

js Base64与字符串互转

1、base64加密 在页面中引入base64.js文件,调用方法为: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>base64加密</title> <script type="text/jav...

JS判断鼠标从哪个方向进入DIV容器

   写的不够高大上 , 不要介意哦。。。 Js: //进去 $(".flash").bind("mouseenter",function(e){ /** the width and height of the current div **/ var w = $(this).width(); var h = $(this...

使用defined和require引入js

define(function(require, exports, module) { var ceshiTwo ={ dataCeshi:[1,2,3,4,5], arrCeshi:function(){ var _this=this; var array=[]; $.e...

js实现复制内容到剪切板,兼容pc和手机端,支持Safari浏览器

Javascript原生有一些事件:copy、paste、cut, 这些事件可以作用的目标元素: 能获得焦点的元素 (如contentEditable内容能编辑或者可以选中的元素),或者是<body> <div id="cardList">   <div class="btn">点击我,复制我</div>...