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

为什么 0.1+0.2 不等于 0.3

为什么 0.1+0.2 不等于 0.3
在 JavaScript 中,0.1 + 0.2 的结果不等于 0.3,这是因为在 JavaScript 中采用的是双精度浮点数格式(64 位),而在这种格式下无法精确表示某些小数,因此在进行计算时会出现精度误差。

具体来说,0.1 和 0.2 都是无限循环小数,无法用二进制精确地表示。在 JavaScript 中,这些小数会被转换成最接近它们的可表示值,然后再进行计算。因此,0.1 和 0.2 被转换成的值可能会存在精度误差,导致它们的和不等于 0.3。

下面的代码演示了这个问题:

console.log(0.1 + 0.2);   // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3);   // false

为了避免这个问题,通常可以采用以下两种方法:

  1. 将小数转换成整数,进行计算后再转换回小数。例如,可以将小数乘以 10 的几次方,将它们变成整数,进行计算后再除以相应的倍数,转换回小数。
console.log((0.1 * 10 + 0.2 * 10) / 10);   // 0.3
  1. 使用第三方库,例如 Decimal.js、big.js 等,这些库提供了更高精度的计算方法,可以避免浮点数计算时的精度误差。
// 使用 Decimal.js 进行计算
const Decimal = require('decimal.js');
console.log(new Decimal('0.1').plus('0.2').equals('0.3'));   // true
http://www.lryc.cn/news/178757.html

相关文章:

  • huggingface_hub v0.17 现已发布
  • 机器学习——一元线性回归构造直线,并给出损失函数
  • OpenHarmony自定义组件介绍
  • 云原生之使用Docker部署PDF多功能工具Stirling-PDF
  • B树和B+树的介绍和对比,以及MySQL为何选择B+树
  • MD5 绕过第一式:弱比较绕过
  • 红黑树是如何实现的?
  • 实验室没人导该怎么办
  • pytest简明教程
  • 解决方案:解决https页面加载http资源报错
  • 嵌入式开源库之libmodbus学习笔记
  • Spring MVC 中的数据验证技术
  • windows 修改hosts映射,可以ping通,但是无法通过http url 路径访问,出现 500 Internal Privoxy Error
  • 如何将图片转为ico格式
  • ElasticSearch - 基于 JavaRestClient 操作索引库和文档
  • 【人脸质量评估】MagFace:一个既可以用作人脸识别,又可以用作人脸质量评估的方法
  • FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持
  • 智能驾驶、智能家居、智能工业中的 AI 关键基础设施,半导体厂商恩智浦的角色是什么?
  • APScheduler包——python tornado框架中实现定时任务
  • BASH shell脚本篇3——字符串处理
  • 【SSL】用Certbot生成免费HTTPS证书
  • 报错:java.sql.SQLSyntaxErrorException: Table ‘examsys.Teacher’ doesn’t exist
  • .NET的PLC帮助类
  • Linux中nfs:failed: Operation not supported
  • ElasticSearch映射与模板介绍
  • 通过 Azure 日志分析加强云安全
  • [H5动画制作系列 ]变量,帧频,监听器等的生命周期基础测试
  • 基于SpringBoot的服装生产管理系统的设计与实现
  • 动态内存操作(2)
  • Windows-Delphi 窗口置顶