当js做小数运算时存在bug,大概是因为二进制和十进制转换之间的关系。

bug如图

解决方案

1.运算结果后,乘以100再除以100。网上推荐这种方法但是乘以1000再除以1000依然存在精度问题

2.使用toFixed()方法,效率貌似没有第一种高,这里返回的值一定有两位小数,要么后台用double接收,要么用parseInt()转换为整数parseInt((35.23*100).toFixed(2))。

3.自己写算法函数

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类型增加一个方法,调用起来更加方便。*/
Number.prototype.div = function(arg) {return accDiv(this, arg);
}
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.prototype.mul = function(arg) {return accMul(arg, this);
}
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.prototype.add = function(arg) {return accAdd(arg, this);
}

转载于:https://www.cnblogs.com/aeolian/p/9232331.html

js做小数运算精度问题相关推荐

  1. js中浮点数运算精度问题

    在js中,我们有时会遇到计算,通过加减乘除处理某些业务.那么这时候如果不做任何处理,就会出现如下典型的精度丢失问题. console.log(0.1 + 0.2) ; // 0.30000000000 ...

  2. js parsefloat 精度_js 浮点小数计算精度问题 parseFloat 精度问题

    在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题 var price = 10.99; var quantity = 7; var needPay = parseFloat ...

  3. JS中调用bignumber处理高精度小数运算

    ignumber.js用于数字精度要求较高的计算. bignumber.js源码地址:https://github.com/MikeMcl/bignumber.js 1.下载bignumber.js. ...

  4. DSP应用学习:定点DSP的小数运算方法—Q格式

    一.定点DSP做小数运算思路梳理: 1.由于定点DSP适用于做整数的加减乘除运算,在做小数的加减乘除等运算时效率极低,因此在做含小数数据运算时需要将小数转换为Q格式的整数,从而将问题转变为整数的加减乘 ...

  5. JS中bignumber处理高精度小数运算的使用

    JS中bignumber处理高精度小数运算的使用 安装或引用 bignumber.js的API地址: 静态方法 实例方法 项目开发中发现精度丢失的问题,如0.1+0.2 = 0.30000000000 ...

  6. js小数运算出现多为小数问题_JS操作小数运算,结果莫名其妙出现多位小数问题...

    Number类型: Number类型是ECMAScript中最常用和最令人关注的类型了:这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被成为双精度数值),为支持各种数据类型 ...

  7. js做四则运算时,精度丢失问题及解决方法

    js做四则运算时,精度丢失问题及解决方法 参考文章: (1)js做四则运算时,精度丢失问题及解决方法 (2)https://www.cnblogs.com/smile-tianxia/p/117149 ...

  8. vue 使用 currency.js 处理 小数的相加减 精度问题

    vue 使用 currency.js 处理 小数的相加减 精度问题 安装 currency.js npm install --save currency.js 或者 yarn add currency ...

  9. 浮点数运算精度丢失的问题

    导入 在我们平时编码的过程中,你一定遇到过这样的问题: const a = 0.1; const b = 0.2; console.log(a + b); // 0.30000000000000004 ...

最新文章

  1. C标准库stdlib.h概况
  2. 成功解决A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,co
  3. 【C++深度剖析教程8】C++的操作符重载的概念
  4. html5number最小值,JavaScript Number(数字)
  5. php布尔类型代码,PHP数据类型之布尔型的介绍
  6. 转:gcc编译C++程序
  7. 现在,Echo不仅会说话,还学会了变魔术
  8. poj 2823 Sliding Window 双向队列,学习
  9. Django,Celery, rabbitmq
  10. struts2 + spring + mybatis 框架整合
  11. 51.Linux/Unix 系统编程手册(下) -- POSIX IPC 介绍
  12. 基于qt制作的音乐播放器,2.0版
  13. 机器学习中非平衡数据的处理 —— smote算法
  14. seaweedfs使用说明
  15. springboot+Vue整合Luckysheet,实现在线编辑Excel表格
  16. 蜂窝六边形的六边形消除高分秘籍
  17. 【C语言】运算符大全(附运算符优先级表)
  18. python函数运行加速
  19. 群晖NAS入门(一)
  20. 1951-2021年高考数学试题

热门文章

  1. centos7 挂载镜像盘 LVM处理的不合理
  2. Mac下启动和停止Mysql服务
  3. MySQL check the manual that corresponds to your MySQL server version for the right syntax错误
  4. 剑指Offer:打印从1到最大的n位数
  5. Linux下的Notepad++编辑器——Notepadqq
  6. eclipse显示行号和Tab、空格、回车
  7. 大数据之-Hadoop3.x_MapReduce_FileInputFormat切片机制---大数据之hadoop3.x工作笔记0106
  8. 理解认证_授权_以及会话_Spring Security OAuth2.0认证授权---springcloud工作笔记110
  9. MyCat分布式数据库集群架构工作笔记0006---Mycat启动
  10. SpringCloud工作笔记071---mysql字符集 utf8 和utf8mb4 的区别_utf8是不能存储emoji表情字符集的