JavaScript并不完美~(一)浮点数

299 阅读1分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

JavaScript 并不完美~亦不影响其运行:

JavaScript 并不完美~ 但并不影响它运行起来, 并被广泛使用运行在浏览器中.

来看看一些 JavaScript 中的特别之处:

0.1 + 0.2 !== 0.3   ==>   0.30000000000000004

0.1 + 0.2 我们计算肯定就是直接得结果了, 而计算机却是通过二进制存储数据, 然后就是计算的 0.10.2 两个家伙的二进制的和.

0.1 的二进制是 0.0001100110011001100...(1100循环)

0.2 的二进制是:0.00110011001100...(1100循环)

image image

JavaScript 中可精确表示的最大数: Number.MAX_SAFE_INTEGER, 如果大于这个安全数, 绝大多数整数将无法被精确表达. 如下图:

9999999999999999    //==> 10000000000000000

image

点到而止, 当然还可以继续追求到底: JavaScript 数据类型和数据结构 - JavaScript | MDN.

解决 0.1 + 0.2 !== 0.3, 让它们相等

1. 使用原生方法:

Number.prototype.toFixed() 这个方法

toFixed(digits) 方法使用定点表示法来格式化一个数,会对结果进行四舍五入。

numObj.toFixed(digits)

参数 digits 默认为 0; 表示小数点后数字的个数; 介于 0 - 20(包括)之间,实现环境可能支持更大范围。

2. 使用类库: math.js

math.js 官网 : mathjs.org/

math.js - npm 包 : www.npmjs.com/package/mat…

github - 仓库 : github-https://github.com/josdejong/mathjs

解决:

// 引入包, 使用其功能方法函数
const math = require('mathjs')

console.log(math.add(0.1, 0.2)) // 0.30000000000000004

console.log(math.format((math.add(math.bignumber(0.1), math.bignumber(0.2))))) // '0.3'

学习积累

养成学习记录的好习惯, 不断进步!