JavaScript数值计算

JavaScript在执行数值运算时,常会出现浮点数溢出问题。
例如:0.1 + 0.2 不等于 0.3

num = 0.1 + 0.2;//0.300000000000000004

这是JavaScript中最常报告的Bug,并且这是遵循二进制浮点数算数标准(IEEE 754)而导致的结果。这个标准适合很多应用,但它违背了数字基本常识。

幸运的是,浮点数中的整数运算是精准的,所以小数表现出来的问题可以通过指定精度来避免。

num = (1 + 2) / 10;//0.3

这种处理经常在货币计算中用到,在计算货币时当然期望得到精确的结果。例如,元可以通过乘以100而全部转成分,然后就可以准确地将每项相加,求和后的结果可以除以100转换回元。

JavaScript能够自动转换变量的数据类型,这种转换是一种隐性行为。在自动转换数据类型时,JavaScript一般遵循:如果某个类型的值被用于需要其它类型的值的环境中,JavaScript就自动将这个值转换成需要的类型,具体如下表:

值(value) 字符串操作环境 数字运算环境 逻辑运算环境 对象操作环境
undefined “undefined” NaN false Error
null “null” 0 false Error
非空字符串 不转换 字符串对应的数字或NaN true String
空字符串 不转换 0 false String
0 “0” 不转换 false Number
NaN “NaN” 不转换 false Number
Infinity “Infinity” 不转换 true Number
Number.POSITIVE_INFINITY “Infinity" 不转换 true Number
Number.NEGATIVE_INFINITY “-Infinity” 不转换 true Number
Number.MAX_VALUE “1.7976931348623157e” + 308 不转换 true Number
Number.MIN_VALUE ”5e-324" 不转换 true Number
其它所有数字 ”数字的字符串值“ 不转换 true Number
true “true” 1 不转换 Boolean
false ”false" 0 不转换 Boolean
对象 toString() valueOf()或toString()或NaN true 不转换

如果把非空对象用在逻辑运算环境中,则对象被转换为true。此时的对象包括所有类型的对象,即使是值为false的包装对象也转换为true。

如果把对象用在数值运算环境中,则对象会被自动转换为数字,如果转换失败,则返回值NaN。被转换为数值0.如果数组仅包含一个数字元素,则被转换为该数字的数值。如果数组包含多个元素,或者仅包含一个非数字元素,则返回NaN。

当对象用于字符串环境中时,JavaScript能够调用toString()方法把对象转换为字符串再进行相关计算。当对象与数值进行加号运算时,则会尝试将对象转换为数值,然后参与求和运算。如果不饿能够将对象转换为有效数值,则执行字符串连接操作。

JS--JavaScript数值计算与类型转换详解相关推荐

  1. [js]JavaScript Number.toPrecision() 函数详解

    [js]JavaScript Number.toPrecision() 函数详解 JavaScript: numberObject.toPrecision( [ precision ] ) 如果没有提 ...

  2. javascript中强制类型转换详解+总结

    javascript中一共有六种类型:Number,String,Boolean,Undefined,Object,function.可以用typeof来查看声明的变量的类型.注意,typeof是操作 ...

  3. 用html js制作迷宫,JavaScript生成随机迷宫详解

    本篇教程介绍了JavaScript生成随机迷宫详解,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < #先看生成随机迷宫的代码吧↓ 1 2 3 生成随机迷宫v ...

  4. 众望所归的《JAVASCRIPT凌厉开发--EXT详解与实践 》终于上市了!

    大家好,我是这本书的策划编辑,经过努力,这本书终于上市了. 从创作开始,我们的目标就是写一本真正适合开发者参考和借鉴的EXT书,写作过程中,经过了无数次讨论和痛苦修订,感谢三位作者付出的艰辛劳动. 这 ...

  5. Javascript常用的设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  6. js购物车功能php,使用JS实现购物车功能步骤详解

    这次给大家带来使用JS实现购物车功能步骤详解,使用JS实现购物车功能的注意事项有哪些,下面就是实战案例,一起来看一下. 我们肯定都很熟悉商品购物车这一功能,每当我们在某宝某东上购买商品的时候,看中了哪 ...

  7. JS 中 valueOf() 方法的详解

    JS 中 valueOf() 方法的详解 JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身.通常由JavaScript内部调用,而不是在 ...

  8. JS es6的Class类详解

    文章目录 JS es6的Class类详解 class基本语法 Class的基本语法之constructor Class的基本语法之类的调用方式 Class的基本语法之getter和setter Cla ...

  9. JavaScript中getBoundingClientRect()方法详解

    JavaScript中getBoundingClientRect()方法详解 getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bo ...

  10. js showModalDialog参数的使用详解(转)

    js showModalDialog参数的使用详解_javascript技巧_脚本之家 http://www.jb51.net/article/45281.htm 本篇文章主要是对js中showMod ...

最新文章

  1. 嵌入式linux应用程序升级,基于嵌入式Linux平台的应用升级机制的研究与设计
  2. 书值 | 第 2 期:成为技术管理者,思维上应该如何转变?
  3. Hibernate:SQL查询 addScalar()或addEntity()
  4. C# WINFORM中的combobox.items.add实现像web开发那样,添加显示内容text和实际value值
  5. Dart核心基础List概述
  6. 正则不等于一个字符串_王晓阳 | 物理主义不等于物理学主义——表述物理主义的一个新方案...
  7. 【滤波器】基于matlab GUI分数延迟滤波器设计【含Matlab源码 1347期】
  8. No controller found
  9. redhat官网操作文档查找
  10. 遥感导论(梅安新版)知识点概括
  11. 李宏毅2020机器学习笔记2——CXK
  12. IT毕业生给学弟学妹们的真心话——离校座谈记录
  13. c语言字符数组的实际长度,C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别...
  14. 在overleaf中使用bibtex引用参考文献
  15. View的foreground属性
  16. 网易运营微专业 目录
  17. JSP SSH图书系统myeclipse开发sql数据库BS模式java编程mvc结构 详细设计
  18. Android Studio 中模拟器无法打开,提示Error launching emulator
  19. 过来看~/(≧▽≦)/~啦啦啦!!各种书本课后答案!——第二部分:【化学物理】
  20. CSS根据屏幕分辨率宽度自动适应的办法

热门文章

  1. “百度开放云编程马拉松”成都赛区19件作品及团队介绍
  2. 边缘检测之Sobel算子Prewitt算子
  3. usbserialch340驱动安装失败_CH340驱动|CH340系列USB转串口驱动下载win7/win10 64位 - 欧普软件下载...
  4. linux 设置固定ip的方法
  5. 区块链100讲:如果连电子钱包都不懂,还谈什么区块链开发(有彩蛋)
  6. css内联样式!important
  7. 计算机备份打印机驱动程序,windows7如何快速备份打印机驱动
  8. 高频谐振功率放大器仿真
  9. python数据采集卡_高速数据采集卡在雷达信号的采集与分析中的应用笔记
  10. ps4html5播放器,PS4迎来全新媒体播放器 支持多种视频音频格式