js浮点运算bug的解决办法

高通 Gen AI 推理扩展 (GENIE)(5):实战指南与Engine API深度解析 本文深入解析高通Gen AI推理扩展(GENIE)的Engine API核心功能与实战应用,涵盖引擎实例化、多引擎动态切换、性能调优及跨平台部署等关键技巧。通过详细代码示例和性能数据,帮助开发者高效利用GENIE进行AI推理,提升应用性能与稳定性。 阅读详情

一、事件   

    最近在做项目的管理费,在客户端用js写的。发现了一个重大问题,比如0.7*8.1=5.6699999999,10.3-9.2=1.100000000014.为什么会出现这些问题呢?难道是js对浮点数运算的bug?该怎么办?

二、响应 

     “内事不决问百度,外事不决问google”啊,上网查找资料,证实了我的想法,也找到了解决方案。同时我也有了自己的解决方案。

     1、网上解决方案是对浮点数的运算做了类似重写,代码如下:(转载) 


//除法函数,用来得到精确的除法结果
//
说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//
调用:accDiv(arg1,arg2)
//
返回值:arg1除以arg2的精确结果
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方法,调用起来更加方便。
Number.prototype.div = function (arg){
    
return accDiv(this, arg);
};
//乘法函数,用来得到精确的乘法结果
//
说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//
调用:accMul(arg1,arg2)
//
返回值:arg1乘以arg2的精确结果
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方法,调用起来更加方便。
Number.prototype.mul = function (arg){
    
return accMul(arg, this);
};
//加法函数,用来得到精确的加法结果
//
说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//
调用:accAdd(arg1,arg2)
//
返回值:arg1加上arg2的精确结果
function accAdd(arg1,arg2){
    
var r1,r2,m;
    
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
    
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
    m
=Math.pow(10,Math.max(r1,r2));
    
return (arg1*m+arg2*m)/m;
}
//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add = function (arg){
    
return accAdd(arg,this);
}
//减法函数
function accSub(arg1,arg2){
     
var r1,r2,m,n;
     
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
     
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
     m
=Math.pow(10,Math.max(r1,r2));
     
//last modify by deeka
     //动态控制精度长度
     n=(r1>=r2)?r1:r2;
     
return ((arg2*m-arg1*m)/m).toFixed(n);
}
///给number类增加一个sub方法,调用起来更加方便
Number.prototype.sub = function (arg){
    
return accSub(arg,this);
}

    这样,如果你要计算0.7*8.1 只需(0.7).mul(8.1)调用mul方法就可以得到准确的答案。

    2、我的解决方案 

    这不失为一种好方法,然而,我想将浮点型转化为整形后再做运算也是解决的一种方法。如0.7*8.1,我们可以这么算(0.7*10)*(8.1*10)/100,结果为5.67,显然是可以的。又通过项目的实践,都能得出准确的结果。

三、总结:

     1、尽量不要用JS做复杂的运算,特别是浮点数的运算。

     2、如果一定要进行浮点数的运算的话,先将浮点数转化为整形,再运算。 

---------------------

转载地址: http://www.cnblogs.com/jiahaipeng/archive/2008/10/29/1321821.html 

GR00TN1.7国内本地下载+模型下在+hugingface无法连接,本地模型下载 GR00TN1.7 阅读详情

相关推荐

MAS1102量产工具实战指南:从下载到开卡,附固件选择与RDT优化技巧

本文提供MAS1102量产工具的实战指南,涵盖从工具下载、短接识别到开卡操作的全过程。重点解析了固件选择策略与RDT优化技巧,帮助用户成功修复基于联芸MAS1102主控的固态硬盘,解决常见开卡错误并提升SSD性能与稳定性。

c2d3e4f的博客 1848

js 浮点数计算Bug

之前在写项目时候,直接对带小数点的数据进行运算,发现所得到的值并不是自己想要的。 经过一系列学习后,发现在JavaScript中,浮点数运算都是先转换成二进制,在转成二进制的时候有出现无限循环小数,故...

QDY5945的博客 576

上机任务一:空气质量指数 (air quality index,AQI是定量描述空气质量状况的指数。为了更好地了解和人们身体健康息息相关的天气状况,本书模拟生成500条某地区天气数据,一行样本对应一天

调整后的R平方为0.4308,考虑了模型中的自由度,它略低于多重R平方,说明模型的解释能力可能有限。总的来说,新的模型相对于之前的模型在AIC值上更优,包含了最高温度(X2)和最低温度(X3)这两个重要的预测因子,并且对AQI的解释能力较好。在表中,Df表示自由度,Sum Sq表示总平方和,Mean Sq表示均方(总平方和除以自由度),F value表示F统计量,Pr(>F)表示对应的p值。在分析这些结果时,需要关注系数的显著性(p值),系数的方向(正向或负向影响),以及系数的大小(估计值)。

Mrrunsen的博客 703

解决JavaScript浮点数(小数) 运算出现Bug的方法

例如37.2 * 5.5 = 206.08 就直接用JS算了一个结果为: 204.60000000000002 怎么会这样, 两个只有一位小数的数字相乘, 怎么可能多出这么小数点出来。比如: 7 * 0.8 JavaScript算出来就是: 5.6000000000000005 网上找到了一些解决办法, 就是重新写了一些浮点运算的函数或直接扩大倍数运算。/ 如果在知道小数位个数的前提下, 可以考虑通过将浮点数放大倍数到整型(最后再除以相应倍数), 再进行运算操作, 这样就能得到正确的结果了。

m0_72929120的博客 671

解决JS浮点数运算结果不精确的Bug

最近在做项目的时候,涉及到产品价格的计算,经常会出现JS浮点数精度问题,这个问题,对于财务管理系统的开发者来说,是个非常严重的问题(涉及到钱相关的问题都是严重的问题),这里把相关的原因和问题的解决方案整理一下,也希望给各位提供一些参考。 一. 常见例子 // 加法 0.1 + 0.2 = 0.30000000000000004 0.1 + 0.7 = 0.79...

越努力,越幸运! 1万+

js对浮点数计算的bug

js中使用浮点数运算,有时候不能得到合适的结果。有时候会发现出现**0000005的样子。 解决方案,重写js对浮点型的运算。代码来源于网络 //浮点数加法运算 function FloatAdd(arg1,arg2){ var r1, r2, m, c; try { r1 = arg1.toString().split(".")[1].length } catch

Yannis的技术之路 574

JS 浮点数精度问题,以及 toFixed 的 bug

1.JS 浮点数精度问题 由于 JS 存在精度问题,所以以下运算结果与预期不符。 注:以下代码若无特殊说明,则均为谷歌浏览器下的运行结果。 0.56 * 100 // 56.00000000000001 0.1 + 0.2 // 0.30000000000000004 0.3 - 0.1 // 0.19999999999999998 所以不要用浮点数做以下判断 if (0.1 + 0.2 === 0.3) {} 当我们对浮点数做运算后要保留固定位小数时,也要进行处理 0.5623 * 100 // 预期

qq_39025670的博客 2940

JS 浮点运算bug解决办法

<br />用js计算<br /> 12.32 * 7   结果是多少?<br /><br /> 答案:86.24000000000001<br /><br /> 为什么会出现这种问题?怎么解决?<br /><br /> js在处理小数的乘除法的时候有一个bug,解决的方法可以是

游龙YoooLong 3000

JavaScript 小数相加小数点后面多出很多位

javascript浮点运算的一个bug. 解决办法: 使用toFixed(2)函数把结果保留小数点后两位!或后几位

weixin_43971228的博客 2693

JS 浮点数加减乘除造成的精度丢失解决办法

文章来源地址:http://blog.csdn.net/lyd518/article/details/7236464 转载请注明出处,尊重作者劳动成果,谢谢! 问题这样的:   37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)   我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998   怎么会这样,两个只有一位...

Be a Man Keep fighting for destination 1026

js浮点运算bug解决办法js 0.009*100=0.89999,0.7*8.1=5.6699999 错误处理 (应用到fastadmin后台去)

比如0.009*100=0.899999999,0.7*8.1=5.6699999999,10.3-9.2=1.100000000014.为什么会出现这些问题呢?1、将代码保存文件, 放入public\assets\js下。》》》》 引入fastadmin后台去,2、在控制器对应Js文件里引入,在第一行。3、然后就直接在代码里任意使用。Js 浮点运算要小心!

qq_34700162的博客 308

js浮点数运算BUG解决办法

S浮点数运算Bug解决办法(转) 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。 我Google了一下,发现原来这是JavaScript浮点运算的一个bug。 比如:7*0.8

Mr_chun的专栏 859

解决js浮点运算bug

function add(a, b) { var c, d, e; try { c = a.toString().split(".")[1].length; } catch (f) { c = 0; } try { d = b.toString().split(".")[1].length; } cat

软件工程小施同学 的专栏 850

js 小数点计算 BUG 解决办法

js解决浮点计算BUG终极解决办法  之前在网上看到这种解决办法 问题这样的:   37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数)   我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998   怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来。   我Google了一下,发现原来这是Java

冷凝的专栏 4542

说说我对 javascript 浮点运算 BUG 的看法

对于 javascript 浮点运算 BUG 大家都应该有所耳闻,在网上也会收到很多解决办法,在这里我引用两篇博文。 Javascript 浮点运算问题分析与解决 Javascript优化后的加减乘除(解决js浮点数计算bug) 首先,用 2.1 / 0.335 举例说明我的观点。在计算器上计算会得到两组数值 6.26865671641791 和 6.26865671641791044776

1270

javascript负数浮点运算bug-.-!!!

**javascript是一门脚本(胶水)语言是一门弱类型语言。同时也有相当的bug让人头痛。会不会就是这些些让人头痛的bug导致程序员们脱发严重的??? ** var n=-255.346; var m=n.toFixed(2);//默认参数是0,允许参数为0-20直接 // 保留小数点后几位 // toFixed保留是会自动四舍五入 console.log(m); 如上代码所示当n的值为-255.3...

只是忘了回家的路的博客 838

下列有关javascript和php,相关 PHP 和 js 浮点运算的坑

javascript0.1 + 0.2 为啥不等于 0.3 ? (正确结果:0.30000000000000004)0.8 * 7 为啥不等于 5.6 ? (正确结果:5.6000000000000005)PHPvar_dump(intval(0.58 * 100));正确结果是 57,而不是 58浮点运算惹的祸其实这些结果都并非语言的 bug,但和语言的实现原理有关, js 所有数字统一为 Nu...

weixin_32142311的博客 291

理解和解决JavaScript中的浮点运算bug

NUMBER类型 JavaScript 只有一种数值类型:number(数字),包括“整数”和带小数的十进制数。 严格意义上说,JavaScript没有整形数值,JavaScript 中的数字类型是基于 IEEE 754 标准来实现的双精度浮点数。 默认情况下大部分数字都以十进制显示,小数部分最后面的 0 被省略。这就是我们在JavaScript中看到的整数。 比如: var a = 1.0; ...

weixin_44534120的博客 820

C#应用程序设计教程+课后习题答案.rar

C#应用程序设计教程 耿肇英 课后习题答案

基于安卓android的网络视频播放器源码.zip

基于安卓android的网络视频播放器源码.zip

上一篇: jquery 当值改变时触发方法
下一篇: Struts2标签实现for循环
cmalaya
博客等级 码龄22年 18粉丝 114原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值