原博1 原博2

方案1和方案2都是有效的

情景: 在计算浮点数时候,出现多余小数。
例如: 1.11 + 1 = 2.1100000000000003

为什么计算小数会出现误差?
浮点数值的最高进度是17位小数,但在进行运算的时候其精确度却远远不如整数;整数在进行运算的时候都会转成10进制; 而Java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果。然后再将二进制结果换算为十进制,这里通常会出现第二次的误差。

方案1:简单的js加法和减法:

//加法
Math.round((parseFloat(num1) + parseFloat(num2))*100)/100
//减法
Math.round((parseFloat(num1) - parseFloat(num2))*100)/100

方案2:复杂的加减乘除运算封装:

以下代码可以直接复制使用

有效的话请点赞评论下,让更多的朋友能够看到解决问题!

<template><div style="padding:20px;"><div><span>1.11 + 1 = {{ 1.11 + 1 }}</span> <span>-----处理浮点计算:{{ addNum }}</span></div><div><span>1.11 - 1 = {{ 1.11 - 1 }}</span> <span>-----处理浮点计算:{{ subNum }}</span></div><div><span>1.11 * 100= {{ 1.11 * 100 }}</span> <span>-----处理浮点计算:{{ mulNum }}</span></div><div><span>0.11 / 0.1 = {{ 0.11 / 0.1 }}</span> <span>-----处理浮点计算:{{ divNum }}</span></div><div><span> (((1.11 + 1) - 1) * 100) / 0.1 = {{ (((1.11 + 1) - 1) * 100) / 0.1 }}</span> <span>-----处理浮点计算:{{ lastNum }}</span></div></div>
</template><script>export default {data () {return {addNum: 0,subNum: 0,mulNum: 0,divNum: 0,lastNum: 0}},created () {this.getNum()},methods: {getNum () {console.log(1.11 + 1)console.log(1.11 - 1)console.log(1.11 * 100)console.log(0.11 / 0.1)console.log((((1.11 + 1) - 1) * 100) / 0.1)this.addNum = this.floatObj().add(1.11, 1)// 加法this.subNum = this.floatObj().subtract(1.11, 1)// 减法this.mulNum = this.floatObj().multiply(1.11, 100)// 乘法this.divNum = this.floatObj().divide(0.11, 0.1)// 除法this.lastNum = this.floatObj().divide(this.floatObj().multiply(this.floatObj().subtract(this.floatObj().add(1.11, 1), 1), 100), 0.1)// 混合运算},/** * 封装了加减乘除四种计算方法 ***  add / subtract / multiply /divide* this.floatObj().add(1.11, 1)// 加法* this.floatObj().subtract(1.11, 1)// 减法* this.floatObj().multiply(1.11, 100)// 乘法* this.floatObj().divide(0.11, 0.1)// 除法*/floatObj () {// 判断obj是否为一个整数function isInteger (obj) {return Math.floor(obj) === obj}/** 将一个浮点数转成整数,返回整数和倍数。如 3.14 >> 314,倍数是 100* @param floatNum {number} 小数* @return {object}* {times:100, num: 314}*/function toInteger (floatNum) {var ret = { times: 1, num: 0 }if (isInteger(floatNum)) {ret.num = floatNumreturn ret}var strfi = floatNum + ''var dotPos = strfi.indexOf('.')var len = strfi.substr(dotPos + 1).lengthvar times = Math.pow(10, len)var intNum = Number(floatNum.toString().replace('.', ''))ret.times = timesret.num = intNumreturn ret}/** 核心方法,实现加减乘除运算,确保不丢失精度* 思路:把小数放大为整数(乘),进行算术运算,再缩小为小数(除)** @param a {number} 运算数1* @param b {number} 运算数2* @param op {string} 运算类型,有加减乘除(add/subtract/multiply/divide)**/function operation (a, b, op) {var o1 = toInteger(a)var o2 = toInteger(b)var n1 = o1.numvar n2 = o2.numvar t1 = o1.timesvar t2 = o2.timesvar max = t1 > t2 ? t1 : t2var result = nullswitch (op) {case 'add':if (t1 === t2) { // 两个小数位数相同result = n1 + n2} else if (t1 > t2) { // o1 小数位 大于 o2result = n1 + n2 * (t1 / t2)} else { // o1 小数位 小于 o2result = n1 * (t2 / t1) + n2}return result / maxcase 'subtract':if (t1 === t2) {result = n1 - n2} else if (t1 > t2) {result = n1 - n2 * (t1 / t2)} else {result = n1 * (t2 / t1) - n2}return result / maxcase 'multiply':result = (n1 * n2) / (t1 * t2)return resultcase 'divide':result = (n1 / n2) * (t2 / t1)return result}}// 加减乘除的四个接口function add (a, b) { // 加法return operation(a, b, 'add')}function subtract (a, b) { // 减法return operation(a, b, 'subtract')}function multiply (a, b) { // 乘法return operation(a, b, 'multiply')}function divide (a, b) { // 除法return operation(a, b, 'divide')}return {add: add,subtract: subtract,multiply: multiply,divide: divide}}}
}
</script><style>
</style>

有效的话请点赞评论下,让更多的朋友能够看到解决问题!

js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;相关推荐

  1. php 浮点数比较 出错,PHP计算浮点数出错的解决方法

    PHP计算浮点数出错的解决方法 发布时间:2020-06-26 14:37:49 来源:亿速云 阅读:111 作者:Leah 这篇文章将为大家详细讲解有关PHP计算浮点数出错的解决方法,文章内容质量较 ...

  2. js 转换数字为decmail_BigDecmail(解决java计算精度问题)

    当使用double进行商业运算时,double计算会丢失精度.可以使用BigDecimal进行计算. import java.math.BigDecimal; import org.junit.Tes ...

  3. java项目 js报错红叉,解决js红叉,java Resources红叉

    Js文件红叉 Myeclipse 解决方法 1.  右键js文件 2.  选择[MyEclipse] 3.  点击[Exculde From Validation] Myeclipse2015 以上版 ...

  4. js浮点数精度丢失问题及如何解决js中浮点数计算不精准

    js浮点数精度丢失问题及如何解决js中浮点数计算不精准 参考文章: (1)js浮点数精度丢失问题及如何解决js中浮点数计算不精准 (2)https://www.cnblogs.com/ranyonsu ...

  5. JavaScript学习(六十四)—关于JS的浮点数计算精度问题解决方案

    JavaScript学习(六十四)-关于JS的浮点数计算精度问题解决方案 您的语言没有中断,它正在执行浮点数学运算.计算机只能本地存储整数,因此它们需要某种表示十进制数字的方式.此表示并不完全准确.这 ...

  6. 使用Decimal.js解决前端计算金钱失真问题

    使用Decimal.js解决前端计算金钱失真问题 参考文章: (1)使用Decimal.js解决前端计算金钱失真问题 (2)https://www.cnblogs.com/GGDong/p/10997 ...

  7. c语言浮点数如何精确计算,浮点数精确运算的分析和解决办法

    1.01 + 2.01 = 3.02 2.01 * 2.01 = 4 0401   不知你注意没有,这个很寻常的等式,你如果将它放在C++中,Java中,Basic中,它 居然是不成立的.计算机在开玩 ...

  8. 基于js利用经纬度进行两地的距离计算

    转自:http://www.storyday.com/html/y2009/2212_according-to-latitude-and-longitude-distance-calculation- ...

  9. stm32F4单片机计算浮点数的时候偶发性出错的解决方法

    发现问题 项目开发过程中,中断中要计算几个浮点数,仿真时发现浮点数经常性计算错误:计算结果不可能是负值,但却会计算出负值,而且与真实结果完全没有关联性.当时单片机使用的是STM32F429ZGT6,主 ...

最新文章

  1. python小项目推荐项目-Python 的练手项目有哪些值得推荐?
  2. c语言stoi函数源码,一系列相关函数的通用函数(例如std::stoi,std::stof,std::stod等)...
  3. XidianOJ 1146 万神的竞赛
  4. 我为什么还要造轮子?欠踹?Monk.UI表单美化插件诞生记!
  5. ABAP程序系统字段中英文详解
  6. 如何修改微软powerpoint模板文字
  7. mysql 排序 过滤_【MYSQL】-3 排序与过滤
  8. ZooKeeper典型应用场
  9. 文件源码读取 php伪协议,include(文件包含漏洞,php伪协议)
  10. 13.mtk lcm gamma调试
  11. 界面原形设计/UI原型设计
  12. opencv GPU加速 多GPU卡指定GPU索引方法
  13. mysql rank函数怎么用_mysql rank函数怎么用
  14. 如何判断一个文件是否是jpeg格式?
  15. 【狂神说Java】Redis
  16. 方舟生存进化手游版服务器维护,方舟生存进化手游PVX服务器规则一览 PVX服务器怎么玩_3DM手游...
  17. Maven项目插件飘红解决方案
  18. 【Python】2500块的外包项目,一款加密的直播引流软件,逆向JavaScript,保姆级实战教学!
  19. 在CAD制图软件中标注数学公式的操作技巧
  20. ubuntu16.04 opencv3.3 python2.7 caffe GPU环境搭建

热门文章

  1. [转载]使用命名管道实现进程间通信
  2. 汉诺塔递归算法进阶_进阶python 1递归
  3. leetcode107. 二叉树的层次遍历 II
  4. 代码流星雨是什么形式_为什么要在2020年与流星合作
  5. 我如何将Google I / O 2018的兴奋带给尼日利亚沃里的115个人
  6. 自学成才翁_仅因为您是自学成才,并不意味着您必须独自学习。
  7. mongodb数据可视化_使用MongoDB实时可视化开放数据
  8. 使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用
  9. Windows 应用容器化
  10. MySQL之——GROUP BY分组取字段最大值