当前位置: 首页 > news >正文

关于javascript数字精度丢失的解决办法

分析原因

众所周知,在JavaScript中计算两个十进制数的和,有时候会出现令人惊讶的结果,主要原因是计算机将数据存储为二进制所引起的,所以这并不是javascript存在的缺陷,而在其他语言中也有类似的问题。

例如下面的例子:
我们在计算 0.1 + 0.1 的到的结果是 0.2,但是计算 0.1 + 0.2 的结果并不是0.3,而是0.30000000000000004
在这里插入图片描述
我们在计算 1.2 - 1 的结果并不是0.2,而是0.19999999999999996
不过这并不是JavaScript独有的,其他编程语言也会存在同样的问题。
在这里插入图片描述

解决办法:我们可以使用toPrecision凑整后再使用parentFloat,比如计算1.6385000000000001

let parse = parseFloat(1.6385000000000001.toPrecision(12))
console.log(parse === 1.6385) // true

接下来我们封装成方法使用

/**@param: 浮点小数@precise: 转换后有几位数
*/
function precision(num, precise) {return parseFloat(num.toPrecision(precise));
}precision(1.6385000000000001, 1) // 2
precision(1.6385000000000001, 2) // 1.6
precision(1.6385000000000001, 3) // 1.64

其原理就相当一数学中的四舍五入。

http://www.lryc.cn/news/322547.html

相关文章:

  • 每日一题 第二十一期 洛谷 组合的输出
  • JavaScript 面试题
  • java输入语句scanner
  • Python从入门到精通秘籍十一
  • WRF模型教程(ububtu系统)-WPS(WRF Pre-Processing System)概述
  • C语言向C++过渡的基础知识(一)
  • GEE遥感云大数据林业应用典型案例及GPT模型应用
  • macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载
  • 数据结构面试常见问题之Insert or Merge
  • perl 用 XML::LibXML 解析 Freeplane.mm文件,XML文件
  • Spring Cloud Alibaba微服务从入门到进阶(七)(服务容错-Sentinel)
  • Arduino RP2040 + SSD1306 I2C OLED +LittleFS存储GBK字库实现中文显示
  • 代码随想录算法训练营第day53|1143.最长公共子序列 、 1035.不相交的线、 53. 最大子序和 动态规划
  • 【Flutter学习笔记】10.2 组合现有组件
  • C++的vector类(一):vector类的常见操作
  • SpringBoot注解
  • 每日三个JAVA经典面试题(十九)
  • springboot企业级抽奖项目业务一(登录模块)
  • 【Python + Django】启动简单的文本页面
  • Docker——问题解决:服务器端和Windows端IP互通
  • HTTP跨域
  • 用Python的turtle库绘制皮卡丘
  • C语言打印当前时间
  • (一)基于IDEA的JAVA基础4
  • 【Python】复习12:标准库与第三方库
  • CUDA 12介绍
  • 旅游系统-软件与环境
  • AI基础知识(2)--决策树,神经网络
  • 蓝桥杯C++大学B组一个月冲刺记录2024/3/21
  • 由浅到深认识C语言(14):枚举