javascript浮点运算偏差的成因及解决方法

本文探讨了JavaScript中浮点数运算出现偏差的原因,并提供了解决方案,包括使用字符串处理和toFixed方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://eatpockyboy.blog.163.com/blog/static/116734640201231414154243/ 
最近做javascript算价格总和的时候遇到乘法也有乘不尽的情况。。。= =! 设想是js的运算算法里面包含了除法 没想到是这样的的  = =! js解释器的作者们真心强啊。。。 除了下文提及的解决方法之外 还有一个就是如果浮点的小数位确定时 比如价格是小数点后两位的 那么我们可以把价格乘以100 运算完之后再作相应的处理 这样会涉及一个位数过大(比如我这个价格要算个n次方的话就......)而转字符串处理的问题 这样效率本来就不高的算法而变得更加笨重 呃 但是下文的通过字符串切割分成小数部分和整数部分运算再算结果的这个方法效率貌似也不怎的 因此如何取舍就看诸君的需求了 

转自:http://topic.youkuaiyun.com/u/20120329/17/6cc27133-a13f-4b9d-b253-fc8a04fd2f5c.html 

-----------------正文----------------- 

最近做js是对浮点类型计算时总是有偏差比如 
3*0.8输出2.4000000000000003 
在网上查了一下原因: 

用解析字符串的方式移动小数点,转化为整数,完毕后,在把小数点复位。   
  浮点数运算的时候,先转化为二进制,用二进制来算,结果再转回十进制   
  例如 :求1038.1-1000   
  1038.1=10000001110.0001100110011001100110011001100110011001100.....   
  1000= 1111101000   
  1038.1转化为二进制是个无限循环小数,1100是循环节,只能取近似值,误差就是这里产生的  
如果浏览器版本高,可以用toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 
后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。 
语法 
NumberObject.toFixed(num) 
返回值 
返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。 

抛出 
当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。 

当调用该方法的对象不是 Number 时抛出 TypeError 异常。 
在本例中,我们将把数字舍入为仅有一位小数的数字: 

Show the number 13.37 with one decimal: 
<script type="text/javascript"> 
var num = new Number(13.37); 
document.write (num.toFixed(1)) 
</script> 

输出: 
Show the number 13.37 with one decimal: 
13.4 

解决方法: 
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)  
}

内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值