为什么 0.1 + 0.1 !== 0.2

news2024/12/24 9:36:51

总结了几个很有意思的基础题目,分享一下。

为什么 0.1 + 0.1 !== 0.2

看到这个问题,不得不想到计算机中的数据类型,其中浮点数表示有限的精度。那么它就无法精确的表示所有的十进制小数,所以在在某些情况下,浮点数的运算可能会导致微小的精度误差。这就是为什么 0.1 + 0.1 不等于 0.2 的原因。

具体来说,0.10.2 这两个数字都无法在二进制浮点数表示中精确地表示为有限位数的小数。这导致了一个微小的误差,当它们相加时,这个误差会叠加,使得结果不等于 0.2

这个问题不仅适用于 JavaScript,还适用于大多数编程语言中使用浮点数表示的情况。为了处理这种情况,通常需要在比较浮点数时使用某种容忍误差的方法,而不是直接进行相等性比较。

在 JavaScript 中,可以使用以下方法来处理浮点数的比较:

// 使用小数点后的位数来比较
const num1 = 0.1 + 0.1;
const num2 = 0.2;
const tolerance = 0.000001; // 定义一个容忍误差

if (Math.abs(num1 - num2) < tolerance) {
  console.log("它们大致相等");
} else {
  console.log("它们不相等");
}

[“1”,“2”,“3”].map(parseInt) 结果是什么

第一感觉是不是打印[“1”, “2”, “3”]。不认真看确实会有这样的结论。实际上并不是。
这个题目涉及到了map和parseIent两个知识点,首先了解一下这两个函数。

  1. map:JavaScript 中的 map() 函数是数组对象的一个高阶函数,它用于对数组的每个元素执行一个指定的函数,并返回一个新的数组,新数组中的元素是原始数组元素按照指定函数进行转换后的结果。map() 函数的基本语法如下:
array.map(callback(currentValue[, index[, array]])[, thisArg])

参数说明:

  • callback:一个函数,用于对每个元素进行处理。这个函数接受三个参数:
    • currentValue:当前正在处理的数组元素。
    • index(可选):当前元素的索引。
    • array(可选):调用 map() 的数组本身。
  • thisArg(可选):可选参数,用于指定 callback 函数中 this 的值。

map() 函数的工作流程如下:

  • 从数组的第一个元素开始,依次对每个元素执行 callback 函数。
  • callback 函数的返回值存储在一个新数组中。
  • 返回新数组作为 map() 函数的结果。
  1. parseInt:函数接受两个参数:要解析的字符串和基数(进制)。但在 map 中,parseInt 被传递了三个参数:当前元素、当前索引和数组本身。

所以[“1”, “2”, “3”].map(parseInt)的结果是[1, NaN, NaN]。

map 将按照以下方式调用 parseInt

  • 第一次调用:parseInt("1", 0, ["1", "2", "3"]),其中基数为 0(表示自动识别进制)。
  • 第二次调用:parseInt("2", 1, ["1", "2", "3"]),其中基数为 1。
  • 第三次调用:parseInt("3", 2, ["1", "2", "3"]),其中基数为 2。

parseInt 在解析字符串时,如果第一个字符无法转换为数字,则返回 NaN。在这里,第一次调用 parseInt 时,字符串 “1” 可以成功解析为数字 1。然而,在第二次和第三次调用时,基数参数不符合期望的进制,因此解析失败,返回 NaN

因此,["1", "2", "3"].map(parseInt) 的结果是 [1, NaN, NaN],这是由于 parseInt 函数在不同基数下的解析失败导致的。

下列题目输出结果

(function a () {
  "use strict";
  var a = b = 3;
})();
console.log("输出a" + (typeof a !== 'undefined'));
console.log("输出b" + (typeof b !== 'undefined'));

非严格模式下运行
代码块 (function a (){ var a = b =3; })(); 包含了一个函数表达式。在这个代码块中,有以下操作:

  1. var a = b = 3;:这个语句声明了变量 a,但同时也声明了一个全局变量 b 并将其赋值为 3。在非严格模式下,未使用 varletconst 声明的变量会成为全局变量。

  2. console.log("输出a" + (typeof a !== 'undefined')):在这里,你尝试检查变量 a 是否被定义。由于 a 被声明为局部变量,因此在函数外部不可见,typeof a 返回 "undefined",因此整个表达式的结果是 "输出afalse"

  3. console.log("输出b" + (typeof b !== 'undefined')):这里尝试检查变量 b 是否被定义。虽然 b 在函数内部赋值,但由于没有使用 varletconst 来声明它,它成为了一个全局变量,因此在整个页面的作用域内都可见。typeof b 返回 "number"(因为它被赋值为 3),因此整个表达式的结果是 "输出btrue"
    根据非严格模式下的变量作用域和声明方式,代码的输出结果是 "输出afalse""输出btrue"

严格模式下
严格模式下不会输出任何结果,而会抛出错误。
在上面代码块内,有一个立即执行函数 (function a (){ ... })();,它包含了以下行为:

  1. var a = b = 3;:在这行代码中,尝试声明一个局部变量 a,并将其赋值为 b。然而,这里存在一个陷阱。由于没有使用 varletconst 来声明 b,它成为了一个全局变量,而不是局部变量。这意味着 b 的作用域会泄漏到外部的函数作用域(全局作用域),而不是被限制在函数内部。

  2. 在严格模式下,var a 的作用域仅限于函数内部,所以 a 只能在函数内部访问,而在函数外部是不可见的。因此,尝试在函数外部访问 a 时会导致 Uncaught ReferenceError 错误。

  3. 同样,在严格模式下,尝试在函数外部访问全局变量 b 时,也会导致 Uncaught ReferenceError 错误,因为全局变量 b 在非严格模式下会被隐式地创建,但在严格模式下需要显式声明。

所以在定义**var a = b =3;**时就会抛出错误,不会执行打印的语句
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1045668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

得帆信息3大核心产品全部入选!中国信通院2023《高质量数字化转型产品及服务全景图》

由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中会议在京召开&#xff0c;会上中国信通院全面解读并复盘了行业数字化转型的发展趋势&#xff0c;同时正式发布了最新的《高质量数字化转型产品…

从零开始的LINUX(一)

LINUX本质是一种操作系统&#xff0c;用于对软硬件资源进行管理&#xff0c;其管理的方式是指令。指令是先于图形化界面产生的&#xff0c;相比起图形化界面&#xff0c;指令显然更加难以理解&#xff0c;但两者只是形式上的不同&#xff0c;本质并没有区别。 简单的指令&…

雅思考试需要注意些什么?

雅思考试是国际英语语言测试体系&#xff08;IELTS&#xff09;的一部分&#xff0c;是许多想要在国际舞台上学习、工作或移民的人的必备考试。为了在雅思考试中取得成功&#xff0c;考生需要注意一些重要事项。本文知识人网小编将探讨一些关键的注意事项&#xff0c;以帮助考生…

经典算法:最短点对

软件架构师何志丹 说明 旧文新发&#xff0c;改了错别字&#xff0c;死链等。尽量保持“原汁原味”。 难点 如何测试。我的解决方式是&#xff1a;a,三种解法&#xff0c;看结果是否一致。b,小数据&#xff08;100个点&#xff09;&#xff0c;人工排查。第一种方法&#x…

【数据结构】—超级详细的归并排序(含C语言实现)

​ 食用指南&#xff1a;本文在有C基础的情况下食用更佳 &#x1f525;这就不得不推荐此专栏了&#xff1a;C语言 ♈️今日夜电波&#xff1a;斜陽—ヨルシカ 0:30━━━━━━️&#x1f49f;──────── 3:20 …

baichuan2 chat模型sft指令微调数据格式分析

一、前言 百川官网&#xff1a;https://www.baichuan-ai.com/ 模型权重&#xff1a;https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat 记录一下 baichuan 2 的 tokenizer 及 chat 数据构建格式。 二、数据处理代码 根据官方 github 的 finetune 代码&#xff0c;将其…

民企再续“助学故事”,恒昌公益两所“云杉校园”如何聚木成林?

撰稿|多客 来源|贝多财经 “生物世界丰富多彩、五花八门、琳琅满目&#xff0c;可谓大千世界芸芸众生”……这是遵义市正安县安场镇光明完全小学图书馆收藏的一本名为《闯入生物世界》书中所写景象。 在这所学校&#xff0c;课外书籍按照年级及类别进行划分&#xff0c;如一…

M1/M2 Parallels Desktop 19虚拟机安装Windows11教程(超详细)

引言 在Window上VMware最强&#xff0c;在Mac上毫无疑问Parallels Desktop为最强&#xff01; 今天带来的是最新版Parallels Desktop 19虚拟机安装Windows11的教程。 1. 安装Parallels Desktop 19虚拟机 https://blog.csdn.net/weixin_52799373/article/details/133316608 …

RocketMQ 事务消息发送

目录 事务消息介绍 应用场景 功能原理 使用限制 使用示例 使用建议​ 事务消息介绍 在一些对数据一致性有强需求的场景&#xff0c;可以用 RocketMQ 事务消息来解决&#xff0c;从而保证上下游数据的一致性。 应用场景 分布式事务的诉求 分布式系统调用的特点为一个核…

【数据结构】深度剖析最优建堆及堆的经典应用 - 堆排列与topk问题

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;数据结构 &#x1f525;该文章分别探讨了向上建堆和向下建堆的复杂度和一些堆的经典应用 - 堆排列与topk问题。 ❗️该文章内的思想需要用到…

排序学习总结

取每个对象的内接矩形框&#xff0c;然后再排序&#xff0c;根据排序的结果确定原对象顺序。 inner_rectangle1(RegionAffineTrans1, Row1, Column1, Row2, Column2) gen_rectangle1(Rect,Row1, Column1, Row2, Column2) sort_region(Rect,RectSort,character,true, row)count…

Oracle物化视图(Materialized View)

与Oracle普通视图仅存储查询定义不同&#xff0c;物化视图&#xff08;Materialized View&#xff09;会将查询结果"物化"并保存下来&#xff0c;这意味着物化视图会消耗存储空间&#xff0c;物化的数据需要一定的刷新策略才能和基表同步&#xff0c;在使用和管理上比…

【嵌入式】使用嵌入式芯片唯一ID进行程序加密实现

目录 一 背景说明 二 原理介绍 三 设计实现 四 参考资料 一 背景说明 项目程序需要进行加密处理。 考虑利用嵌入式芯片的唯一UID&#xff0c;结合Flash读写来实现。 加密后的程序&#xff0c;可以使得从芯片Flash中读取出来的文件&#xff08;一般为HEX格式&#xff09;不能…

C#WPF命令Command使用实例

本文实例演示C#WPF命令使用实例 定义: 命令(Command):命令表示一个任务单元,并且可跟踪该任务的状态,实际上是实现了ICommand接口的类。然而,命令实际上可以包括任务执行的逻辑代码,也可以不包括从而仅作为联系命令源与命令目标的媒介。比如,WPF 默认的接口实现类Ro…

el-collapse 嵌套中 el-checkbox作为标题,选中复选框与el-tree联动

<el-drawertitle"应用授权":visible.sync"menuDrawer"><el-collapse accordion style"padding: 15px"><el-collapse-item v-for"item in platList"><template slot"title"><el-checkbox v-model…

PostMan、ApiFox等工具Post请求中@RequestParam和@RequestBody的混合使用如何传参

方法签名 PostMapping("/mms/sendAudit")public R sendAudit(RequestParam("mmsId") Long mmsId,RequestParam("ecId") Long ecId,RequestBody(required false) SignMatchRule signMatchRule) {以ApiFox为例子 RequestParam的Params的参数正常…

基于51单片机0.001s精度秒表9.999s仿真设计(源码+仿真+原理图+PCB+报告+器件清单+讲解)

基于51单片机0.001s精度秒表9.999s仿真设计&#xff08;源码仿真原理图PCB报告器件清单讲解 讲解视频1 功能说明&#xff1a;2 仿真电路&#xff1a;3 原理图&#xff1a;4 PCB&#xff1a;5 程序&#xff1a;6 资料清单&&下载链接&#xff1a; 基于51单片机0.001s精度…

2023年【煤气】报名考试及煤气免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 煤气报名考试根据新煤气考试大纲要求&#xff0c;安全生产模拟考试一点通将煤气模拟考试试题进行汇编&#xff0c;组成一套煤气全真模拟考试试题&#xff0c;学员可通过煤气免费试题全真模拟&#xff0c;进行煤气自测…

什么是图像翻译

域(Domain)&#xff1a;一系列具有相同风格的图像集合。 图像翻译(Image Translation)&#xff1a;从一张图像到另一张图像的变换&#xff0c;也是域迁移。 &#xff08;风格迁移、图像上色、图像分割...&#xff09; 图像翻译GAN模型分类 根据作用区域&#xff1a;…

Qt学习_13_可执行文件.exe添加图标/logo

本文简单记录一下如何给Qt生成的exe&#xff08;可执行&#xff09;文件&#xff0c;添加图标/logo 第一步 去选一个你喜欢的图标&#xff0c;下载下来 ByteDance IconPark (oceanengine.com) iconfont-阿里巴巴矢量图标库 第二步 用第一步下载的图片&#xff0c;在线生成一…