1.Float精度在JS的解决方法
最近做了一个有关折扣价的计算的功能,所有的运算都是在前台通过js来做,做完之后经过手工核算发现了一个问题,当时做的一个例子是10*0.94,按照我们正常的思维,这个结果应该是9.4,但是在js中的计算结果是9.39999999.....。其实按照二进制的算法来说js的这个结果是最精确的,但是按照我们正常人的思维来看结果只能是9.4,并且业务要求是不能四舍五入,要强制保留小数位数,所有这样一来就出问题了,后来在一个技术交流群了里有群友推荐了下面的解决方法,成功的解决了这个问题,请往下看:
核心代码就只有这几行:
//1.先将其他数据类型转换成String类型
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{
//2.对字符串分割后取出小数位的长度并得到总的小数位数
m+=s1.split('.')[1].length;
m+=s2.split('.')[1].length;
//3.此处原理是将小数转换为整数相乘然后再除10的m次方即得到最终想要的结果
return
Number(s1.replace('.',''))*Number(s2.replace('.',''))/Math.pow(10,m);//9.4
}catch(e){
e.pringStack();
}
除法和上面的乘法大同小异,只需将两数相乘改为相除,乘法时的除以pow函数改为乘,同时pow函数中m的值取小数位数之差即可。
1.Float精度在JS的解决方法的更多相关文章
- Float精度 在JS的解决方法
最近在做一个工资核算的系统,所有的运算全部在前台进行,因此用了的是JS来做. 做完以后,经手工核算,发现一个奇怪的问题.就是JS算出来的结果跟用计算器算出来的结果有差距. 想了很久,也没有想出问题出在 ...
- java中double和float精度丢失问题及解决方法
在讨论两位double数0.2和0.3相加时,毫无疑问他们相加的结果是0.5.但是问题总是如此吗? 下面我们让下面两个doubles数相加,然后看看输出结果: @Test public void te ...
- [ JAVA编程 ] double类型计算精度丢失问题及解决方法
前言 如果你在测试金融相关产品,请务必覆盖交易金额为小数的场景.特别是使用Java语言的初级开发. Java基本实例 先来看Java中double类型数值加.减.乘.除计算式实例: public cl ...
- Jquery方法load之后导致js失效解决方法
Jquery方法load之后导致js失效解决方法 >>>>>>>>>>>>>>>>>>> ...
- 当Thread.Sleep的暂停时间参数设置过小时,精度很差的解决方法
一.问题产生 在C#和C++中有这样一个函数:void Sleep(int Timeout),可以让线程暂停指定的毫秒数. 但是我在win8下调用这个函数实现按照固定频率发送udp数据包时,会有一个问 ...
- JS冲突解决方法
Prototype jquery 冲突解决: 在页面中同时存在jquery 和 prototype ,当用到 $ 的时候,难免产生冲突,所以一定要区分开来: <script type=&qu ...
- IE6/IE7/IE8下float:right的异常及其解决方法
1.最简单的方法就是调换顺序,将需要右浮动的元素写在前面.写成这样:<h2><a href="#">更多>></a>小标题</ ...
- 页面嵌套时js失效解决方法
事件:iframe或easyui的dialog嵌套页面时,被嵌套的页面可能js因位置失效; 解决: //动态加载js(根据父级html位置计算) jQuery.getScript("scri ...
- js乱码解决方法
在开发中引用了Bootstrap多选插件,将其中显示的英文改为中文后,页面出现乱码. 对于大多数的Web页面我们一般使用俩种编码:UTF-8和GB2312,所以我们只要统一页面和JS的编码就可以避免乱 ...
随机推荐
- spring boot 常见的第三方集成
spring boot基于1.x. 一 集成redis 1.1 配置 spring.redis.host = localhost spring.redis.port = 6379 spring.red ...
- 从零开始学spring cloud(八) -------- Eureka 高可用机制
一.Eureka高可用机制介绍 Eureka服务器没有后端存储,但注册表中的服务实例都必须发送心跳以使其注册保持最新(因此可以在内存中完成). 客户端还有一个Eureka注册的内存缓存(因此,他们不必 ...
- VS2017 连接Linux
喜欢测试各种工具. 注意选择 使用C++的Linux开发 ! 配置ssh连接 工具->选项 添加ssh连接. 添加头文件 我的路径是:C:\Program Files (x86)\Microso ...
- jquery全选的选中和取消选中
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Populate screen data automatically
field zz_test-uname. module populate_record on chain-request. module populate_record input. ztlo_tes ...
- mysql保存乱码(C#)
解决办法只有一个就是在配置文件中强制指定编码格式:<add name="TSDBEntities" connectionString="metadata=res:/ ...
- git hub命令,上传到github
git hub命令,上传到github 1,git init; 初始化 2,git config --global user.email " ....@.... ...
- h5页面转图片长按保存
5页面经常会遇到此类需求.将最后的结果页转换为图片长按保存.下面介绍一下实现此需求的过程 1,依赖安装 cnpm install html2canvas --save 2,依赖引入,使用 绑定 初始化 ...
- Connection failed Flowsocketconnector Failed to connect to target addressWindows error10061:由于目标计算机积极拒绝,无法连接
使用bitbise时报上面错误 : 解决方法 :卸载软件并删除相关的文件 (包含bitvise 及注册表中的文件)重新安装后能连接
- Program Hyundai i20 Smart Key with VVDI & Xtool X100 Pad2
How-to: generate and program Hyundai i20 smart key with VVDI Mini Key Tool and XTOOL X100 PAD2. Step ...