At what point does comparing between an quot;integerquot; and a quot;floatquot; equals `true`?(在什么情况下,整数和浮点数之间的比较等于‘真’?)
问题描述
我了解Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。
我知道Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2等于True。
但我最近才意识到:
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">var number = 2007199254740991;
var float = 2007199254740991.123;
console.log(number === float);
// => true
但是
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">var number = 1007199254740991;
var float = 1007199254740991.123;
console.log(number === float);
// => false
所以我的问题是,我们如何找到"最大安全浮动"?
编辑
我的问题:
在什么情况下,"整型"和"浮点型"之间的比较等于true?
推荐答案
询问何时比较失败是错误的问题。比较两个数字始终正确;如果且仅当要比较的两个数字具有相同的值,则计算结果为TRUE。
该问题实际上发生在以前的操作中。将源代码中的数字转换为Number、加法和其他操作会在将精确的实数数学值舍入为可用浮点表示的值时引入错误。
JavaScript使用IEEE-754二进制64位,它有一个53位有效数(浮点数的小数部分)。这意味着幅值为252或更大的任何数字没有任何位可以表示小于1的值-它们没有小数部分。因此,当将任何252或更大的数字转换为JavaScriptNumber时,结果是一个整数。
但较小的数字也会四舍五入。从251到252,可用的最低有效位表示2−1,即1/2。因此,在此间隔内转换为Number的任何数字都必须产生一个整数或一个整数加1/2。这意味着某些数字(如2251799813685248.6)将产生非整数(2251799813685248.5),而其他数字(如2251799813685248.8将产生整数(2251799813685249)。
低于252的每个震级,有些数字在转换为Number时将舍入为整数,而有些数字不会舍入为整数。(在252以上,所有数字都舍入为整数。)在较小的幅度下,只有更接近整数的数字才会舍入为整数-随着幅度的减小,格式会变得更加"敏感"。
这篇关于在什么情况下,整数和浮点数之间的比较等于‘真’?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在什么情况下,整数和浮点数之间的比较等于‘真’?
基础教程推荐
- 最佳动态 JavaScript/JQuery 网格 2022-01-01
- 即使每次插入第一个输入的值不同,第二个输入仍显示相同的输入值 2022-01-01
- CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符 2022-01-01
- HTML5 画布调整为父级 2022-01-01
- 逻辑运算符 ||在 javascript 中,0 代表 Boolean false? 2022-01-01
- 使用 jQuery 在悬停时交换 DIV 类 2022-01-01
- 带角度的选项卡:仅使用 $http 在单击时加载选项卡 2022-01-01
- 在 Javascript 中使用 Fetch API 上传文件并显示进度 2022-01-01
- 当木偶师打开Chrome时,不能使用Chrome扩展 2022-01-01
- 从快速中间件中排除路由 2022-01-01
