JS toFixed 四舍六入五成双
以前一直以为toFixed就是四舍五入的方法,后来又有一段时间以为toFixed是五舍六入。今天终于写的时候,终于才知道toFixed是一个叫做四舍六入无成双的诡异的方法。。。
完全不明白为什么要这么写。。。
什么是四舍六入五成双:百度是这么说的:
对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
所以也就是说: (0.557).toFixed(2) => 0.56 然而 (0.567).toFixed(2)=>0.56,这并不是我们想用的四舍五入的方法。所以可以这么修改:
基础方法:
//乘法函数
function accMul(arg1, arg2) { var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); try { m += s1.split(".")[1].length; } catch (e) { } try { m += s2.split(".")[1].length; } catch (e) { } return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
} //给Number类型增加一个mul方法,使用时直接用 .mul 即可完成计算。
Number.prototype.mul = function (arg) { return accMul(arg, this);
}; //除法函数
function accDiv(arg1, arg2) { var t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toString().split(".")[1].length; } catch (e) { } try { t2 = arg2.toString().split(".")[1].length; } catch (e) { } with (Math) { r1 = Number(arg1.toString().replace(".", "")); r2 = Number(arg2.toString().replace(".", "")); return (r1 / r2) * pow(10, t2 - t1); }
}
//给Number类型增加一个div方法,,使用时直接用 .div 即可完成计算。
Number.prototype.div = function (arg) { return accDiv(this, arg);
};
toFixed方法:
// 修改toFixed方法,由原本的四舍六入五成双,改为四舍五入
Number.prototype.toFixed = function(s) { changenum=(parseInt(this.mul(Math.pow( 10, s ) + 0.5)).div(Math.pow( 10, s ))).toString(); index=changenum.indexOf("."); if(index<0&&s>0){ changenum=changenum+"."; for(i=0;i<s;i++){ changenum=changenum+"0"; } }else { index=changenum.length-index; for(i=0;i<(s-index)+1;i++){ changenum=changenum+"0"; } } return changenum;
}
JS toFixed 四舍六入五成双相关推荐
- js版四舍六入五成双方法
规则: 四舍六入五考虑, 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一. function evenRound(num, decimalPlaces) { var d = de ...
- 四舍六入五成双方法-js版
四舍六入五成双方法-js版 // 规则: // 四舍六入五考虑,五后非零就进一,五后皆零看奇偶, 五前为偶应舍去, // 五前为奇要进一. function round_sslr(num, decim ...
- 重写 toFixed 方法,解决 四舍六入五成双 的问题
// 重写 toFixed 方法,解决 四舍六入五成双 的问题 Number.prototype.toFixed=function (d) { var s=this+""; if( ...
- java 四舍六入五成双_【数据小常识】“四舍六入五成双”
"四舍六入五成双"规则如下: "四舍六入五成双",也即"4舍6入5凑偶",这里"四"是指≤4 时舍去,"六&q ...
- 银行家舍入-四舍六入五成双
在js的计算中: 一个例子,比如说一件商品,它的含税单价是450,税率是3%,那么我们将它转为不含税单价.450/1.03=436.8932038834951 结果是17位,共13位小数.当然实际上, ...
- “银行家算法”讲解,在前端表格中利用自定义公式实现“四舍六入五成双”
银行的盈利模式是什么?三个字:信息差!从储户手中收拢资金,然后放贷出去,而所谓的"利润"就是这其中的利息差额. 在我国,人民银行规定每个季度月末的20号为银行结息日,每一年四次结息 ...
- 四舍五入 与 四舍六入五成双
今天公司有个同事在调一个asp程序时候,发现 round(1.25,1) 返回的竟然是1.2 而不是1.3 查询了一下CSDN的帖子,发现这竟然是一个Bug: http://search.csdn.n ...
- c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...
复制内容到剪贴板 代码:#include using namespace std; #define FLENGTH 1000; //宏定义保留3位小数 double fun(double ...
- sqlserver varchar 对于 sum 运算符无效_在sqlserver上实现自定义函数四舍六入五成双...
做过统计都知道关于保留几位小数有好几种方法,其中4舍6入5凑偶用的比较多,所以我就是sqlserver里面实现了一个自定义函数 定义 对于位数很多的近似数,当位数确定后,其后面多余的数字应该舍去,只保 ...
最新文章
- vcenter converter 转换xenserver下linux的错误
- ADO.NET并发性
- PYTHON之路(四)
- 减少运维工作量,如何通过 ROS 轻松实现资源编排新方式
- python database is locked_sqlite遇到database is locked问题的完美解决
- 【Java报错】Greenplum数据库报错 could not determine data type of parameter $2. 问题解决(踩坑分享)
- python适合开发游戏吗_用python能制作游戏吗
- API(应用程序接口)是什么
- UVA11876 N + NOD (N)【欧拉筛法+前缀和】
- 关于level_idc
- 自考《离散数学》题型总结
- 财富智慧 幸福人生——《菁英财商训练营》首场活动在深圳龙岗文博宫举行
- Html导出到Word带页眉页脚
- java 用户留存率_Java后台实现日留存率,求解!
- (poj 2377)Kruskal算法 最大生成树
- 做一个商业网站需要准备什么,需要多少钱?
- 微信支付 Verify the signature and get the Wechatpay certificate corresponding to serialnumber[X] is empt
- 回顾 Firefox 历史
- axis2 默认端口_axis2 webservice 问题,高手进,急!!!!!!!!!!!!!!!!!!!!!
- 电子信息工程班徽设计_青春日职 | 电子信息工程学院成功举办“心系我班,熠熠生徽”班徽设计大赛...
热门文章
- jquery 的$.ajax() 与php后台交互
- 华硕释ShadowHammer恶意程序侦测工具却被微软误判
- Windows逆向学习笔记——Source Insight 4 注册机制研究
- pythonn阶杨辉三角_Python实现杨辉三角
- 二重积分转换成极坐标_极坐标变换计算二重积分中积分限转换的一种简单方法...
- 易用性测试及GUI常见的测试要求
- MacOS搭建esp32开发环境排坑记
- numpy中的省略号(...)和冒号(:)
- Java 常见异常类型及其原因分析
- 深入浅出谈谈IP协议