js做小数运算精度问题
当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做小数运算精度问题相关推荐
- js中浮点数运算精度问题
在js中,我们有时会遇到计算,通过加减乘除处理某些业务.那么这时候如果不做任何处理,就会出现如下典型的精度丢失问题. console.log(0.1 + 0.2) ; // 0.30000000000 ...
- js parsefloat 精度_js 浮点小数计算精度问题 parseFloat 精度问题
在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题 var price = 10.99; var quantity = 7; var needPay = parseFloat ...
- JS中调用bignumber处理高精度小数运算
ignumber.js用于数字精度要求较高的计算. bignumber.js源码地址:https://github.com/MikeMcl/bignumber.js 1.下载bignumber.js. ...
- DSP应用学习:定点DSP的小数运算方法—Q格式
一.定点DSP做小数运算思路梳理: 1.由于定点DSP适用于做整数的加减乘除运算,在做小数的加减乘除等运算时效率极低,因此在做含小数数据运算时需要将小数转换为Q格式的整数,从而将问题转变为整数的加减乘 ...
- JS中bignumber处理高精度小数运算的使用
JS中bignumber处理高精度小数运算的使用 安装或引用 bignumber.js的API地址: 静态方法 实例方法 项目开发中发现精度丢失的问题,如0.1+0.2 = 0.30000000000 ...
- js小数运算出现多为小数问题_JS操作小数运算,结果莫名其妙出现多位小数问题...
Number类型: Number类型是ECMAScript中最常用和最令人关注的类型了:这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被成为双精度数值),为支持各种数据类型 ...
- js做四则运算时,精度丢失问题及解决方法
js做四则运算时,精度丢失问题及解决方法 参考文章: (1)js做四则运算时,精度丢失问题及解决方法 (2)https://www.cnblogs.com/smile-tianxia/p/117149 ...
- vue 使用 currency.js 处理 小数的相加减 精度问题
vue 使用 currency.js 处理 小数的相加减 精度问题 安装 currency.js npm install --save currency.js 或者 yarn add currency ...
- 浮点数运算精度丢失的问题
导入 在我们平时编码的过程中,你一定遇到过这样的问题: const a = 0.1; const b = 0.2; console.log(a + b); // 0.30000000000000004 ...
最新文章
- C标准库stdlib.h概况
- 成功解决A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,co
- 【C++深度剖析教程8】C++的操作符重载的概念
- html5number最小值,JavaScript Number(数字)
- php布尔类型代码,PHP数据类型之布尔型的介绍
- 转:gcc编译C++程序
- 现在,Echo不仅会说话,还学会了变魔术
- poj 2823 Sliding Window 双向队列,学习
- Django,Celery, rabbitmq
- struts2 + spring + mybatis 框架整合
- 51.Linux/Unix 系统编程手册(下) -- POSIX IPC 介绍
- 基于qt制作的音乐播放器,2.0版
- 机器学习中非平衡数据的处理 —— smote算法
- seaweedfs使用说明
- springboot+Vue整合Luckysheet,实现在线编辑Excel表格
- 蜂窝六边形的六边形消除高分秘籍
- 【C语言】运算符大全(附运算符优先级表)
- python函数运行加速
- 群晖NAS入门(一)
- 1951-2021年高考数学试题
热门文章
- centos7 挂载镜像盘 LVM处理的不合理
- Mac下启动和停止Mysql服务
- MySQL check the manual that corresponds to your MySQL server version for the right syntax错误
- 剑指Offer:打印从1到最大的n位数
- Linux下的Notepad++编辑器——Notepadqq
- eclipse显示行号和Tab、空格、回车
- 大数据之-Hadoop3.x_MapReduce_FileInputFormat切片机制---大数据之hadoop3.x工作笔记0106
- 理解认证_授权_以及会话_Spring Security OAuth2.0认证授权---springcloud工作笔记110
- MyCat分布式数据库集群架构工作笔记0006---Mycat启动
- SpringCloud工作笔记071---mysql字符集 utf8 和utf8mb4 的区别_utf8是不能存储emoji表情字符集的