当前位置: 首页 > Web前端 > JavaScript

toFixed和Math.round既不是四舍五入也不是银行四舍五入

时间:2023-03-27 14:06:28 JavaScript

toFixed引入JavaScript的toFixed方法使用定点表示法格式化一个值,number.toFixed(保留小数点后几位),参数为小数点后的个数,介于0到20之间(inclusive),默认为0,返回值是一个用定点表示法表示给定数字的字符串,必要时会对该值进行四舍五入,不足位数则直接用0补小数部分。需要注意的是,它只能用在Number数值型数据上,返回值为String字符串,但如果负数不加括号,会返回Number值console.log(-2.34.toFixed(1))//-2.3console.log((-2.34).toFixed(1))//“-2.3”舍入法则不是我们常见的数学舍入法,而是一种类似庄家的舍入法,其实和庄家的舍入法是一样的四舍五入Math.roundMath.round()函数在对数字进行四舍五入后返回最接近的整数。请注意,这不是真正的舍入,它与银行家的舍入方法不同:如果参数的小数部分大于0.5,则舍入到绝对值较大的相邻整数如果参数的小数部分小于0.5,则舍入到相邻的绝对值较小的整数如果参数的小数部分正好等于0.5,则舍入到相邻的正无穷大(+∞)方向的整数console.log(Math.round(20.49))//20console.log(Math.round(20.69))//21console.log(Math.round(20.5))//21注意console.log(Math.round(20.51))//21console.log(Math.round(-20.5))//-20注意console.log(Math.round(-20.51))//-21庄家取整法根据概率论随机出现0,1,2,3,4,5,6,7,8,9。传统的四舍五入让银行赔钱,因为5是向上数的。.于是就有了庄家的四舍五入算法,规则是四舍五入取偶:4及以下大于等于6时直接四舍五入(同舍入),进位后四舍五入(同四舍五入)5的情况比较复杂:①如果5后面有数字,则向上取整;②如果5后面没有数字,那么如果5前面的数字是奇数,那么就加1;如果5前面的数字是偶数,则直接向下取整5console.log(2.344.toFixed(2))//'2.34'console.log(2.346.toFixed(2))//'2.35'console.日志(2.3451.toFixed(2))//'2.35'控制台。log(2.345.toFixed(2))//'2.34'console.log((2.315).toFixed(2))//'2.32'尾数处理方法示例(保留2位小数)0-4四舍五入1.953=>1.955后非零进位1.9552=>1.965后无进位,1.945=>1.945后无进位,1.975=>1.986-9进位1.957=>1.96这种取整方法虽然叫做“银行家取整”,但实际上它几乎没有与银行有关。我国金融系统中的大部分算法都使用舍入,欧盟委员会对货币兑换的舍入规则也是我们常用的舍入规则。真正广泛应用的银行家舍入法是科学和计算机系统对误差较小的要求,所以银行家舍入法又称为统计学家舍入法和无偏舍入法。现在大部分编程软件默认的四舍五入都是银行家四舍五入,比如c/c++、javascript、php、go,Intel处理器也是采用银行家四舍五入。在浏览器或node环境下,按照庄家取整规则测试toFixed和Math.round,发现5后面没有数字时,按照庄家取整法不是奇偶接近,但是说法很多网上说这个银行家四舍五入法是二货用的,注意踩坑,项目中实际计算还是用第三方计算库或者让后端计算比较好。参考:Number.prototype.toFixedMath.round