为什么JS中0.1+0.2不等于0.3

这篇具有很好参考价值的文章主要介绍了为什么JS中0.1+0.2不等于0.3。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当我们在计算机中使用浮点数进行计算时,特别是在使用二进制表示浮点数时,可能会出现舍入误差。这是由于计算机使用有限的位数来表示浮点数,而某些十进制数无法精确地表示为有限的二进制数。

0.1 和 0.2 都是无限循环的二进制数,在转换为浮点数时并不能完全准确地表示。将它们相加时,可能会出现舍入误差。因此,0.1 + 0.2 在 JavaScript 中的结果并不等于 0.3。

这是因为 0.1 在二进制中是一个无限循环的数,大约是 0.0001100110011001100110011001100110011001100110011...,而 0.2 在二进制中也是一个无限循环的数,大约是 0.001100110011001100110011001100110011001100110011...。当计算机在进行浮点数运算时,只能存储有限的位数,因此会发生舍入误差。



当需要在 JavaScript 中进行精确的十进制计算时,一种常见的方法是将数字转换为整数进行计算,然后再将结果转换回十进制。这可以通过乘以一个适当的倍数来实现。以下是一个例子:

// 将数字转换为整数进行计算
const num1 = 0.1;
const num2 = 0.2;

const multipliedNum1 = num1 * 10;
const multipliedNum2 = num2 * 10;

const sum = multipliedNum1 + multipliedNum2;

// 将结果转换回十进制
const result = sum / 10;

console.log(result);  // 0.3

在这个例子中,我们将 0.1 和 0.2 分别乘以 10,得到整数 1 和 2。然后我们对这两个整数进行求和,得到整数 3。最后,我们将整数 3 除以 10,将结果转换回十进制,得到 0.3。

 


除了将数字转换为整数进行计算的方法,使用内置的`toFixed()` 方法可以用于将浮点数四舍五入为指定小数位数的字符串表示。例如:

const num1 = 0.1;
const num2 = 0.2;

const sum = num1 + num2;

const result = sum.toFixed(1);

console.log(result);  // 0.3

这种方法适用于简单的加法、减法和乘法运算,毕竟数据进行了取舍,结果可能会有偏差。

 

 


另外,一些 JavaScript 库也提供了精确计算的功能,例如 BigNumber.js,这里就不展开介绍了。文章来源地址https://www.toymoban.com/news/detail-466870.html

到了这里,关于为什么JS中0.1+0.2不等于0.3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么两个向量的内积等于模长乘夹角?

      已知两个向量 a = [ a 1 , a 2 ] a=[a_1,a_2] a = [ a 1 ​ , a 2 ​ ] 和 b = [ b 1 , b 2 ] b=[b_1,b_2] b = [ b 1 ​ , b 2 ​ ] ,他们的内积为 a b = a 1 b 1 + a 2 b 2 ab=a_1b_1+a_2b_2 ab = a 1 ​ b 1 ​ + a 2 ​ b 2 ​ ,看书上的定义该内积的值是一个标量,并且等于两个向量的模长的乘积再乘夹角,即:

    2024年01月23日
    浏览(22)
  • 标准化拉普拉斯矩阵特征值范围为什么小于等于2?(证明)

    谱图使用标准化拉普拉斯矩阵 L n o r m L^{norm} L n or m 的一个重要原因就是, L n o r m L^{norm} L n or m 比拉普拉斯矩阵 L L L 稳定。很多资料只是简单地介绍了 L n o r m L^{norm} L n or m ,在kipfGCN中也只是简单地提到 L n o r m L^{norm} L n or m 的特征值不大于2。本文搜集了相关lecture,并推导

    2024年02月11日
    浏览(23)
  • 为什么特征值的重数大于等于线性无关特征向量的个数

    关系就是,特征值的重数 ≥ 该特征值的线性无关向量的个数 ≥ 1 量化关系有 特征值的重数,称为 代数重数 ,等于Jordan矩阵中特征值为λ的Jordan块的阶数之和 特征向量的个数,称为 几何重数 ,等于Jordan矩阵中特征值为λ的Jordan块的个数 证明 先说结论 每个矩阵 等价 于一个

    2024年02月11日
    浏览(28)
  • 「为什么代码要整洁?」——代码整洁度对于项目质量的影响,让我们通过这边文章来教你js和ts的代码整洁技巧,让你的项目更出众

    为什么代码要整洁? 代码质量与整洁度成正比。有的团队在赶工期的时候,不注重代码的整洁,代码写的越来越糟糕,项目越来越混乱,生产力也跟着下降,那就必须找更多人来提高生产力,开发成本越来越高。 整洁的代码是怎样的? 清晰表达意图、消除重复、简单抽象、

    2024年02月07日
    浏览(23)
  • C++ 为什么double类型不能直接判断等于0 两个double类型怎么判断相等

    精度丢失, 十进制小数部分在转换成2进制的时候经常会出现无限位的二进制小数,计算机存储小数有长度限制,所以会进行截取部分小数进行存储,计算机只能存储大概的值,而不是精确的值 。 例如: 判断一个单精度浮点数:则是 if( abs(f) = 1e-6); 要判断一个双精度浮点数

    2024年02月12日
    浏览(21)
  • 我们为什么需要分布式系统?

    简单来说,分布式系统的出现,主要是为了解决单体系统的不足。 分布式系统解决了单机性能瓶颈导致的成本问题。由于摩尔定律失效,廉价PC机的性能瓶颈无法继续突破,虽然小型机和大型机能够实现更高的单机性能,但是成本太高。 分布式系统解决了用户量和数据量爆炸

    2023年04月11日
    浏览(24)
  • 我们为什么需要API管理系统?

    我们为什么需要API管理系统? 随着web技术的发展,前后端分离成为越来越多互联网公司构建应用的方式。前后端分离的优势是一套Api可被多个客户端复用,分工和协作被细化,大大提高了编码效率,但同时也带来一些“副作用”: 接口文档不可靠。很多小伙伴管理接口文档,

    2024年02月12日
    浏览(20)
  • 为什么我们需要去中心化存储?

    为什么我们需要去中心化存储? 我们的社会正处于前所未有的信息大爆炸时代,未来将是数据成为主要生产要素的数字时代,而 Web3 也不外乎于此,作为数据解决方案——去中心化存储,不仅是区块链技术的三大支柱(计算、存储、网络)之一,也是 Web3 领域最早出现也最受

    2024年02月02日
    浏览(36)
  • Python(一):为什么我们要学习Python?

    ❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无论你是学生、职场人士还是

    2024年02月13日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包