与整数不同的是,浮点数虽然有小数部分,但小数部分可以为 0 。浮点数的表示形式可以是传统方式的,比如 3.14159 ;也可以是指数形式的,比如 35.4e5 。
因为存储浮点值使用的内存空间是存储整数值的两倍,所以 ECMAScript 总是想方设法把值转换为 整数。在小数点后面没有数字的情况下,数值就会变成整数。类似地,如果数值本身就是整数,只是小 数点后面跟着 0 (如 1.0 ),那它也会被转换为整数。
对于非常大或非常小的数值,浮点值可以用科学记数法来表示。科学记数法用于表示一个应该乘以 10 的给定次幂的数值。 ECMAScript 中科学记数法的格式要求是一个数值(整数或浮点数)后跟一个大 写或小写的字母 e ,再加上一个要乘的 10 的多少次幂。
浮点值的精确度最高可达 17 位小数,但在算术计算中远不如整数精确。例如, 0.1 加 0.2 得到的不 是 0.3 ,而是 0.300 000 000 000 000 04 。
使用 JavaScript 进行数值计算时,要防止浮点数溢出。例如:二进制的浮点数不能正确的处理十进制的小数,因此 0.1 + 0.2 不等于 0.3 。
const a = 0.1;
const b = 0.2;
const c = 0.3;
console.log(a + b === c); // false
这是 JavaScript 中最常见的 Bug ,并且这是遵循二进制浮点计算标准的( IEEE 754 )而导致的结果。这个标准适合很多地方,但违背了数值基本常识。