100次浏览 发布时间:2024-10-10 08:06:42
在统计、经济或金融业务相关的软件开发过程中,都有数值计算的需求,这就涉及到精确度的问题,这里说明两种处理规则。
数学上的四舍五入,这是在进行数值运算时,能够保留精确度的一种计数方法。主要针对浮点运算,对整数运算同样适用。舍弃位如果小于5,则直接丢弃,如果是大于等于5,则丢弃后进一位。举例:3.1425,要保留3位小数。保留位数值是2,舍弃位数值,即小数第4位是5,根据四舍五入法则,丢弃并进一位,得到3.143。
银行家舍入法,如果舍弃位小于5直接丢弃,大于5则丢弃后进一位;如果是5,分两种情况,如果是丢弃位后面还有非0数值(有多位以0开始,也属于这种情况,如3.1425035,第4位是丢弃位,后面有数值035),则丢弃后进一位,如果丢弃位后面没有非0数值(有多位0也属于这种情况,如3.1425000,第4位是丢弃位,后面有数值000),则前一位保留位是偶数,则舍弃位直接丢弃不进位,如果是奇数则丢弃后进一位。
函数Math.round,是把数值舍入为最近的整数,通过乘10的倍数,再除以10的倍数,可以间接实现四舍五入保留指定小数位数的逻辑。
函数Number.toFixed,是可以按四舍五入指定数值小数部分的保留位数。
但是由于计算机系统内部处理数据用的是二进制,而我们通常输入的都是十进制数据,再进行转换时,会有数值精度丢失的问题,尤其是在处理小数时,比如输入3.1415926,计算机系统内部将该十进制转换成二进制存储,再计算处理结束后,又返回十进制表示时,可能是3.14159259999999999999。这里只是说明这种关系,实际返回不一定是这个结果。
保留两位小数的数值比较
图中标红的数值是与实际进位不符的,不同的数值以及保留位数的不同,得到的结果也各不相同,没有规律。但是我们也看到Number.toPrecision这个函数,它的舍入结果是符合数学上的四舍五入规则的。
函数Number.toPrecision,是按数学上的四舍五入规则,保留指定位数的有效数字,不是保留指定位数的小数。有效数字指从第一个数字不是0的数字开始计数。如0.002346,保留3位有效数字,并不是0.002,而是0.00235(4的后面是5,按四舍五入进一位变成5)。在实际开发中,可以利用这个函数,实现按数学上的四舍五入保留小数位数的函数。
有名人曾经说过,要想记的牢,就要自己动手做。
邦麦鑫保险柜-全国各售后热线实时反馈-今-日-资-讯
2025-04-29 23:52:09金章燃气灶全国各市售后热线号码实时反馈-今-日-汇-总
2025-04-29 23:49:37千禧厨宝燃气灶售后服务维修号码实时反馈-今-日-汇-总
2025-04-29 23:48:59优科斯壁挂炉号码-全国统一400客服24小时服务热线实时反馈-今-日-资-讯
2025-04-29 23:46:04金帝燃气灶全国各市售后服务热线号码实时反馈-今-日-汇-总
2025-04-29 23:42:24小智指纹锁维修服务中心|全天24小时服务热线实时反馈-今-日-汇-总
2025-04-29 23:40:08村田热水器全国统一服务热线-全国24小时服务中心实时反馈-今-日-更-新
2025-04-29 23:26:58智鳌智能锁全国各市售后热线号码实时反馈全+境+到+达
2025-04-29 23:26:06