js 加减乘除精度问题

两小数相加,解决JS两数相加的精度问题 两小数相加,解决JS两数相加的精度问题 前言 加入博客3年,第一次写文章,实在对自己有点无语!但对于前端的学习自己还是个初学者,希望能坚持,加油学习。话不多说,开始第一次。 JS中小数相加存在的精度问题 首先来看一段示例: console.log(0.1+0.2);//0.30000000000000004 console.log(0.2+0.7);//0.8999999999999999 JS中两数小数相加产生精度问题的原因: 1、js中的数字类型只有number类型,不区分浮点型和整形,直接以浮点型d 阅读详情

一。加法精度修改后如下:

function add(...val) {
      let max = 0
      let count = 0
      for (let i = 0; i < val.length; i++) {
        const strVal = val[i].toString()
        const index = strVal.indexOf('.')
        let num = 0
        if (index > -1) {
          num = strVal.length - 1 - index
          max = num > max ? num : max
        }
      }
      for (let i = 0; i < val.length; i++) {
        count += Math.round(val[i] * Math.pow(10, max))
      }
      return count / Math.pow(10, max)
    }

 使用:add(0.1, 0.2, 0.3, 0.4) => 1。可以传多个参数进行相加。

二。减法精度修改后如下:

function sub(...val) {
      let max = 0
      let count = 0
      for (let i = 0; i < val.length; i++) {
        const strVal = val[i].toString()
        const index = strVal.indexOf('.')
        let num = 0
        if (index > -1) {
          num = strVal.length - 1 - index
          max = num > max ? num : max
        }
      }
      for (let i = 0; i < val.length; i++) {
        if (i === 0) {
           count = Math.round(val[i] * Math.pow(10, max))
        } else {
          count -= Math.round(val[i] * Math.pow(10, max))
        }
      }
      return count / Math.pow(10, max)
    }

 使用:sub(1, 0.2, 0.3, 0.4) => 0.1。相当于1 - 0.2 -0.3 -0.4;可以传多个参数,使用首位减后面的所有参数。

三。乘法精度修改后如下:

function ride(...val) {
      const strVal = val[0].toString()
      const strValTwo = val[1].toString()
      const index = strVal.indexOf('.')
      const indexTwo = strValTwo.indexOf('.')
      const num = [0, 0]
      if (index > -1) {
        num[0] = strVal.length - 1 - index
      }
      if (indexTwo > -1) {
        num[1] = strValTwo.length - 1 - indexTwo
      }
      return Math.round((val[0] * Math.pow(10, num[0])) * (val[1] * Math.pow(10, num[1]))) / Math.pow(10, num[0] + num[1])
    }

 使用:ride(0.5, 0.6) => 3, 只允许传入两个参数。%计算可以这样ride(0.5, 100) => 50。

function percentage(val) {
      const strVal = val.toString()
      const index = strVal.indexOf('.')
      let num = 0
      if (index > -1) {
        num = strVal.length - 1 - index
      }
      if (num > 2) {
        return Math.round(val * Math.pow(10, num)) / Math.pow(10, num - 2)
      } else {
        return Math.round(val * 100)
      }
    }

 上面这个是专门用于计算%数的。percentage(0.05) => 5

四。除法精度修改后如下:

function exc(val, valTwo = 100) {
      const strVal = val.toString()
      const strValTwo = valTwo.toString()
      const index = strVal.indexOf('.')
      const indexTwo = strValTwo.indexOf('.')
      const num = [0, 0]
      if (index > -1) {
        num[0] = strVal.length - 1 - index
      }
      if (indexTwo > -1) {
        num[1] = strValTwo.length - 1 - index
      }
      return Math.round(val * Math.pow(10, num[0])) / (Math.round((valTwo * Math.pow(10, num[1]))) * Math.pow(10, num[0] - num[1]))
    }

 使用:exc(0.5, 0.2) => 2.5, 只允许传入两个参数。如果计算出现无穷数请后期根据需要修改最后代码进行取舍。

建议:所有的计算最后都由后端处理好,再传到前端,这样可以避免精度问题。

JavaScript 加减运算精度损失问题解决 JavaScript 在进行加减运算时可能会出现精度损失,主要原因是其采用 IEEE 754 双精度浮点数标准,导致某些十进制小数无法精确表示为二进制浮点数。例如,0.1 + 0.2 的结果为 0.30000000000000004 而非 0.3。为解决这一问题,可以采用以下方法:1. 使用 toFixed() 和 parseFloat 组合;2. 将数值放大为整数运算后再缩小;3. 使用专门的数学库如 decimal.js;4. 利用 Number.EPSILON 进行微小修正。 阅读详情

相关推荐

JavaScript精确的加减乘除详解

使用Big.js库中的方法,我们可以在JavaScript中实现精确的加减乘除运算,避免浮点数精度问题带来的误差。通过将数字转换为Big.js库中的Big对象,并使用相应的运算方法,我们可以获得预期的精确运算结果。Big.js是一个用于任意精度的十进制算术运算的库,可以解决JavaScript中浮点数精度问题。通过以上的方法,我们可以在JavaScript中实现精确的加减乘除运算,确保计算结果的准确性。对于精确的减法运算,我们可以使用Big.js库的sub方法。

TechNovaX的博客 431

JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js

这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;JavaScript 内部只有一种数字类型Number,也就是说,JavaScript 语言的底层根本没有整数,所有数字都是以IEEE-754标准格式64位浮点数形式储存,1与1.0是相同的。例如,你可以使用a-calc的add方法来计算两个数的和,使用multiply方法来计算两个数的乘积。isGreaterThan--是否大于。

snow的博客 1万+

JS小数加减乘除丢失精度问题的解决办法

【代码】JS小数加减乘除丢失精度问题的解决办法。

chali1314的博客 915

JS减法精度问题处理

JS减法精度问题处理

fairy啊的博客 1425

Vue3 - 完美解决小数的四则运算 “加减乘除“,js 小数加减乘除结果不对解决办法(带小数点的数字进行加法、减法、乘法、除法导致精度丢失问题,vue3 数据计算丢失精度,提供详细计算示例代码)

vue3,js,ts,vue3小数加减乘除,vue3.js小数四则运算不对,vue3小数加减乘除结果不对,vue3js两个小数相加相减相乘相除得到的结果不正确怎么办,vue3如何解决小数加减乘除问题,vue3网页网站的加减乘除法精确计算问题,vue3浮点型加减乘除法无法精确计算,jsvue3浮点小数加减乘除不对怎么办,vue3js中小数相加小数点后面多出很多位,vue3带小数点的小数加减乘除时后面有一堆小数,vue3小数点四则运算结果后面有很多位小数点,vue3解决js小数计算精度丢失的库,vue3解

🏆 前端领域优质创作者 4691

斯坦福HumanPlus机器人核心技术解析:从HST强化学习框架到HIT模仿学习的实现路径

本文深入解析了斯坦福HumanPlus人形机器人的核心技术实现路径。其核心在于HST强化学习框架与HIT模仿学习架构的协同:HST作为“小脑”,通过rsl_rl框架在仿真中训练稳健的低级运动控制;HIT作为“大脑”,基于改进的Transformer架构学习高级任务规划。文章详细拆解了从算法原理、代码实现到硬件部署的全流程,为复现这一前沿机器人系统提供了实战指南。

weixin_29082143的博客 283

js math.js 加减乘除 eval方式解决精度问题

js math.js 解决 加减乘除 精度问题 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title></title> <meta

qq_33635666的博客 2308

基于淘宝商城用户购物行为数据分析系统

本文使用HIve+superset技术对阿里云天池提供的淘宝用户购物数据进行处理分析,得到有价值的信息并对平台提出有建设性意义的意见。

m0_51388399的博客 2821

JS解决加减乘除导致的精度问题

在JavaScript中,由于浮点数的存储方式,直接使用原生的加减乘除运算可能会遇到精度问题。下面是一个简单的示例登录后复制 console.log(0.1 + 0.2); // 输出: 0.30000000000000004 console.log(1.23456789 - 0.23456789); // 输出: 0....

weixin_41208494的博客 386

告别130MB/s瓶颈!用Zynq+NVMe实现1.2GB/s高速存储的PL数据分流实战

本文详细介绍了如何通过Zynq+NVMe实现1.2GB/s高速存储的PL数据分流方案,突破传统Zynq架构130MB/s的瓶颈。文章分享了PL直连NVMe的硬件架构设计、软件栈优化及性能调优实战技巧,帮助开发者实现高速数据流的稳定存储。

weixin_42653691的博客 372

aistudio高效解压zip文件的实用技巧

本文详细介绍了在百度AI Studio平台上高效解压ZIP文件的实用技巧。针对深度学习项目数据准备中的常见痛点,重点讲解了使用Python zipfile库和Linux unzip命令两种核心方法,并提供了路径设置、大文件处理、中文乱码等关键问题的解决方案,帮助用户提升数据处理效率。

salt的博客 788

JS 数字加减乘除精度问题解决办法

JS 数字加减乘除精度问题解决办法 1、当小数点后面的个数相同时: num1=1.23 num2=24.21 计算得: num1+num2=1.2324.21 —–这结果表明是,字符串直接拼接 num1*1+num2*1=25.44 —-结果可见,num1*1 是直接将它转变成我们想要的结果了 2、当小数点后面的个数不同时:...

王小明的专栏 1101

VoIP概述

VoIP统一通信与VoIPVoIP与传统电话比较VoIP各项产品设备的类型及应用 统一通信与VoIP 统一通信指的是把计算机与传统通信技术统一成一体的新通信模式,融合计算机网络与传统通信网络在一个网络平台上,实现电话、传真、数据传输、音视频会议、呼叫中心、即时通信等众多应用服务 VoIP又称IP电话或IP网络电话,是Voice Over IP的缩写,这种技术通过对语音信号进行编码数字化,压缩处理成压缩帧,然后转换成为IP数据包在TCP/IP网络上进行传输,从而达到了在IP网络上进行语音通信目的 VoIP与传

kaminao的博客 4365

vue封装mathjs和Decimal.js加减乘除,解决精度问题

vue封装mathjs和Decimal.js加减乘除,解决精度计算问题。

笨小孩 5368

crazyswarm无人机集群搭建笔记(一)资料索引

crazyswarm无人机搭建笔记:资料收集

Coco_range的博客 808

NR PUCCH(一) PUCCH format 0/1

NR中PUCCH物理信道用来发送上行控制信息Uplink Control Information(UCI),当然UCI也可以在PUSCH上发送。UCI 内容包括:CSI,HARQ ACK/NACK ,SR 及上述三者的组合信息。 那先看下PUCCH format ,序列的生成及资源映射的相关内容。 NR中支持5种格式PUCCH,根据PUCCH format占用时域符号长度分为短PUCCH(1-2个符号,PUCCH 0/2)和长PUCCH(4-14个符号,PUCCH1/3/4)。使用短PUCCH 能够支

asd199086的博客 6060

解决js加减乘除精度问题

解决js加减乘除精度问题

dearbaba_11的博客 76

怎样让你的论文看起来“像人写的”?只用三招直接去除AI味(附提示词)

当然如果你在实际使用中还有其他需求,比如降重润色、改写翻译等,也可以结合七哥的专业写作平台来辅助,这个高级学术平台已经内置了ChatGPT4o、ChatGPT4.1、Claude3.7、满血版DeepSeek-R1等AI大模型,帮你写文献综述、干课题申报、写论文等学术任务绝对每一点问题。比如我自己的一套学术写作平台,其中的“降重与润色”模块整合了多种GPTs应用,除了能帮助调整语言风格、避免雷同表达,还可以顺带降个重,对于提升学术文本的整体质量还是非常有用的。一、为什么用AI写出来的文章会有AI味?

智能AI让学术科研更容易 1690

JavaScript加减乘除精度问题

众所周知的 JS 二进制精度问题,特别是乘除法精确小数位计算的时候尤其容易出现。原理看下面链接详细说明,这里我们采用 JS 原生方法处理这个问题,不过也有专门的类库提供选择。 原理分析、类库选择 1. 类库 Math.js 查看包体积大小可以查看我的这篇文章:npm 包体积 介绍:Math.js 是专门为 JavaScript 和 Node.js 提供的一个广泛的数学库。 特点:它具有灵活的表达式解析器,支持符号计算,配有大量内置函数和常量,并提供集成解决方案来处理不同的数据类型。像数字,大数字(.

小帅の技术博客 1351

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

js加减乘除丢失精度问题

在javascript中,当你使用小数进行加减乘除运算时,你会发现,所得到的结果有时后面带有长长的一段小数,使运算变得复杂,并且影响计算结果。上网查询了一下原因,大致如下:在javascript中,带小数的数据运算时总会出现好多位小数.这是因为在javascript中浮点数的计算是以2进制计算的。 /** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失。 * * ...

蔚蓝色的天空 4717

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JS 加减乘除精度问题

现象: 就是类似81.6+1.6 相加,结果会变成 83.19999999999999,不等于83.2 var $h={ //除法函数,用来得到精确的除法结果 //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 //调用:$h.Div(arg1,arg2) //返回值:arg1除以arg2的精确结果 Div: function(arg1, arg2) { arg1 = parseFloat(arg1);

qq_33002773的博客 699

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

js加减乘除丢失精度问题解决方法

在javascript中,当你使用小数进行加减乘除运算时,你会发现,所得到的结果有时后面带有长长的一段小数,使运算变得复杂,并且影响计算结果。上网查询了一下原因,大致如下:在javascript中,带小数的数据运算时总会出现好多位小数.这是因为在javascript中浮点数的计算是以2进制计算的。 复制代码 代码如下: /** * 加法运算,避免数据相加小数点后产生多位数和计算精度

tianyekpp的专栏 688

JavaScript加减乘除精度问题(一)

代码】JavaScript加减乘除精度问题。

Java&Develop的博客 1834

js 关于加减乘除的小数点精度问题

js 在对于浮点型的数值在进行加法 乘法时,会出现精度问题 例如 0.1+0.2 != 0.3 0.1425*100 != 14.25 等等 /** * 精简乘法 accMul * @param {*} fn * @param {*} t * @returns */ // 乘法函数 精确乘法结果 export const accMul = (arg1,arg2)=> { var m=0,s1=arg1.toString(),s2=arg2.toS...

冰魂魄的博客 509

js加减乘除运算的精度问题

问题:js小数运算的时候会出现失去精度的问题 解决: 先强制转化为字符串 获得参与运算两数值的小数位数x 将小数转为整数,然后除对应的10的x次幂 乘法运算 /** * @param {*} arg1 数字 * @param {*} arg2 数字 * @description 两数字相乘 保持精度 */ export const accMul = (arg1, arg2) => { let m = 0 const s1 = arg1.toString() const s2

heerey525 4220

解决JS加减乘除精度问题

解决JS加减乘除精度问题 //v:需精确的数字,num:保留小数位数 function toDecimal(v,num) { var f = parseFloat(v); if (isNaN(f)) { return false; } f = Math.round(v*(Math.pow(10,num)))/Math.pow(10,num); ...

天梓ABU的博客 421
上一篇: 排序算法
下一篇: js 深拷贝
黄祚敏
博客等级 码龄10年 22粉丝 89原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值