JS中对数字(含有小数的)进行相乘后,数值不正确的问题
2020-08-07 14:09
190 查看
之前测试的时候,偶然遇到了个小数相乘的问题,后来找了一下博客,才发现原来是JS浮点运算的问题,故在此记录了一下,避免我忘记。
背景
当时前台在页面上展示时是65.32,但是我后来查后台日志时发现传到后台时的数值为6531.999999999999,看了代码发现是由于前台传的金额与后台计算出的金额不一致,故被后台拦截。
然后我去看了前台的js代码,发现展示的金额确实没问题,但是在订单提交的时候出了问题。
这样直接算出来的确实是有问题的。
解决
(1)网上找到了一些解决办法,就是重新写了一些浮点运算的函数。
(2)这个和数据结构有关系
整数型自动转换成正型计算
小数型直接转成double型计算
这是在内存中运算的时候必须这样
你该知道计算机只认识0和1吧
具体的就是浮点精准度的问题
float 精确到小数点后7位
double 精确到小数点后15位
浮点运算的精度问题,所以代码里使用 toFixed() 进行四舍五入取整
相关文章推荐
- js:数组重排序问题:如何使用sort()方法按数值的大小进行升序或降序排列
- JS验证输入框只能输入数字,并且只能含有2位小数
- JS验证输入的是否是数字及保留几位小数问题
- 解决js进行四则运算时出现的小数尾差问题
- 关于js正则表达式判断一个字符串是否是正确的有数字和小数点组成的金钱形式和 判读数值类型的正则表达式
- js小数相加、相乘失去精度问题解析详解(最优方案)
- JS字符串与数字进行运算时的问题
- JS 数字相加出现多个小数的问题
- JS无法进行数值精确计算的问题
- 移动端限制两位小数并且弹出数字键盘(解决使用H5S使用input[type='number']不兼容JS的问题)
- JS对数字进行货币格式化并且保留两位小数点,小数用0补全
- js中数字转为整数,可以进行运算,保存两位小数
- js对含有日期的json格式的字符对象进行排序
- JS中使用正则表达式校验数字(包括小数)
- SSD 590+直流数字驱动器手册(2)[声明:本人仅仅用来做翻译练习,同时对这个590+产品进行学习,对版权问题不承担责任]
- js中对数字进行正则判断
- angularjs directive 获取scope内容不正确的问题。
- 两种方法解决数字千分位问题(没考虑负数和小数),仅供参考
- 关于JS中判断是数字和小数的正则表达式用法
- javascript(js)浮点数字精度问题的一个解决办法。