js小数运算出现多为小数问题_js 数字加减乘除精度问题,解决小数点后多位小数...
在javascript中,当你使用小数进行加减乘除运算时,你会发现,所得到的结果有时后面带有长长的一段小数,使运算变得复杂,并且影响计算结果。上网查询了一下原因,大致如下:在javascript中,带小数的数据运算时总会出现好多位小数.这是因为在javascript中浮点数的计算是以2进制计算的。于是在网上找了一下解决方法,在此做一下总结,以便以后使用,同时,希望对有需要的朋友有所帮助。
解决方法思路:将小数化成整数后再作运算。具体代码如下:
/**
* 加法运算,避免数据相加小数点后产生多位数和计算精度损失。
*
* @param num1加数1 | num2加数2
*/
function numAdd(num1, num2) {
var baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
return (num1 * baseNum + num2 * baseNum) / baseNum;
};
/**
* 加法运算,避免数据相减小数点后产生多位数和计算精度损失。
*
* @param num1被减数 | num2减数
*/
function numSub(num1, num2) {
var baseNum, baseNum1, baseNum2;
var precision;// 精度
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
};
/**
* 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。
*
* @param num1被乘数 | num2乘数
*/
function numMulti(num1, num2) {
var baseNum = 0;
try {
baseNum += num1.toString().split(".")[1].length;
} catch (e) {
}
try {
baseNum += num2.toString().split(".")[1].length;
} catch (e) {
}
return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
};
/**
* 除法运算,避免数据相除小数点后产生多位数和计算精度损失。
*
* @param num1被除数 | num2除数
*/
function numDiv(num1, num2) {
var baseNum1 = 0, baseNum2 = 0;
var baseNum3, baseNum4;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
with (Math) {
baseNum3 = Number(num1.toString().replace(".", ""));
baseNum4 = Number(num2.toString().replace(".", ""));
return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);
}
};
js小数运算出现多为小数问题_js 数字加减乘除精度问题,解决小数点后多位小数...相关推荐
- js中获取小数点后两位小数
在 JavaScript 中,可以使用 toFixed() 方法来获取小数点后的指定位数. 例如,如果要获取一个数字的小数点后两位小数,可以这样写: var num = 3.14159265; var ...
- html正则表达式 小数点后两位,java的正则表达式的小数点后两位小数
java的正则表达式的小数点后两位小数 [2021-02-10 03:42:04] 简介: [相关学习推荐:js视频教程]测试代码 //1.只能输入数字或者小数点 仅整数,整数加小数 var reg ...
- numpy 数组 保留小数点后两位小数
numpy 数组 保留小数点后两位小数 a1 = np.random.rand(6).reshape(2,3) print(a1) [[0.64382693 0.73840787 0.77315906 ...
- php转化为2位小数的数字,学习猿地-php 转化为两位小数的方法
php转化为两位小数的方法:1.利用"round()"对浮点数进行四舍五入:2.利用"sprintf"格式化字符串:3.利用千位分组来格式化数字的函数" ...
- PHP取小数点后一位小数或几位小数并且不四舍五入,以及四舍五入保留小数
PHP取小数点后一位小数或几位小数并且不四舍五入,以及四舍五入保留小数 这里用到一个 floor() 函数 //floor() 函数向下舍入为最接近的整数,也就是不会进行四舍五入. floor() 假 ...
- js小数运算出现多为小数问题_js小数计算小数点后显示多位小数的实现方法
首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开] 改写displaynum()函数 function displaynum(){var num = 22.77;alert(num ...
- js小数运算出现多为小数问题_JS操作小数运算,结果莫名其妙出现多位小数问题...
Number类型: Number类型是ECMAScript中最常用和最令人关注的类型了:这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被成为双精度数值),为支持各种数据类型 ...
- 小程序使用wxs 解决wxml保留2位小数问题
1.出现溢出表现 从图中可以看到数字超出了很长长度.代码里面是如下这样的.为什么在0.35出现?或者一些相成的计算出现? 而 0.34却不会. 0.41 也会出现,好像是二进制运算出现结果. data ...
- JAVA零碎要点015---java BigDecimal常见操作_加减乘除操作_比较_取几位小数四舍五入_随时更新
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 之前项目都很少用这个BigDecimal啊,最近这个项目对精度要求高,一个电视购物,广告拍摄,排挡 ...
最新文章
- 为Delphi应用增加脚本支持
- xmake入门,构建项目原来可以如此简单
- 用GPUDirect RDMA技术做的代码测试
- OpenCV C++ 01 - Load Image from File and Display
- [Windows] 在 Microsoft Docs 网站中挖掘 MVVM 的各种学习资源
- mybatis支持驼峰自动转换sql吗_SpringBoot整合mybatis——配置mybatis驼峰命名规则自动转换...
- Polka.Domain完成40万美元私募轮融资
- 年轻人找不到自己喜欢的工作,怎么办?
- win10 中的系统变量 windir、userProfile 等
- 麦克纳姆轮全向移动机器人运动学模型应用
- 19.docker attach
- 相平衡计算matlab代码,MATLAB,气液相平衡程序,求帮忙改一下。 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
- oracle判断日期字符串格式,如何测试日期格式字符串是否为Oracle中的有效日期格式字符串...
- FastDFS的安装讲解
- 稳妥方法论:如何完整地设计出游戏关卡及场景
- android的otg功能,Android实现OTG功能
- 使用Xcode的Instruments检测解决iOS内存泄露(leak)
- 一款【免费+简单+好用+性能强大】的词云(Wordcloud)制作工具(含详细介绍)
- Javascript里EQ、NE、GT、LT、GE、LE含义
- 概论_第5章_切比雪夫不等式
热门文章
- 如何能能够学好软件编程技术
- 使用Vue2.x高效还原美团外卖项目
- 计算机二级判断题技巧一半对一半错,计算机二级小技巧
- html overflow 样式,css修改overflow滚动条默认样式
- 安装chrome_Chrome 离线安装包下载
- 单模光电转换器怎么接_单模光纤收发器怎么连接?
- protobuf数据类型_protobuf【1】
- python列表内元素求和_在Python中将列表的每个元素与另一个列表的每个元素相乘/相加/相除的有效方法...
- 最简易上手的numpy学习笔记二
- 基因组浏览器IGV的安装和图形解读