乐趣区

数字

在 JavaScript 只有一种数值类型 number,它包括整数和带小数的十进制数(这里的整数有点特殊,指的是没有小数的十进制数,所以 1.0 等同于整数 1)。
一、语法 1、js 中的小数,多余的零可以省略
let a = .1; // 默认为 0.1
let b = 1.; // 默认为 1
let c = 1.000; // 默认为 1
注意:小数理的的小数点. 很重要哦,一定要引起重视,待会再探究。
2、toFixed() 方法
42.toFixed(2); // SynataxError 语法错误
(42).toFixed(2); // 42.00
0.42.toFixed(2); // 0.42
42..toFixed(2); // 42.00
前面有提到小数的小数点很重要,对于. 运算符,它是一个有效的数字字符,会被优先识别为数字常量的一部分,然后才是对象属性访问运算符。所以第一条语句会被认为是语法错误。关于 toFixed() 方法,其实它是有误差,减少误差可参考 链接描述。
1.335.toFixed(2); // 1.33 有误差
0.155.toFixed(2); // 0.15 有误差
// 这并不是理想状态下的四舍五入,还跟浏览器有关,IE 浏览器的精度比其他浏览器高,
// 有人说 toFixed() 是四舍六入五成双,至于到底是什么样的,我也不太清楚。。。
// 但是,<= 4 的和 >= 6 的小数都没有问题,最大的问题在 5,这个分水岭。

二、浮点数刚开始接触————浮点数,是学 C 语言的时候,那时候的我,只是简单以为浮点数就是多位小数,而双精度就是小数点后保留两位小数,但现在我不再把浮点数想得如此简单了,里面有大学问。js 中没有浮点数这种东西,但是你会发现这样一个问题,如下:
0.1 + 0.2 === 0.3; // false
0.1 + 0.2 == 0.3; // false
从数学角度来看,你会觉得不可思议,这是为什么?这就跟浮点数有关。这是因为计算机中存储数据并不简单,计算机硬件中没有小数这个概念,而且它只能以二进制的形式存储数据,整数还好,整数能正常的运算,但一遇到小数,就会出现很多无法理解的问题。那什么是浮点数呢,到现在我也只能理解皮毛,根据根据国际标准 IEEE 754,任意一个浮点数都可以写成如下形式:
遇到小数运算时,先转化为二进制,运算后,再转化成十进制。其中,有些小数并不是能准确地化成二进制数,但是一个数值的存储空间是有限制的,这时候就会舍弃,就存在着误差,所以小数相加会存在误差。要想解决误差问题,放大 10* 两者中小数点后位数最多的位数 n(可以比 n 大),如下
0.1 + 0.2222 // 结果为 0.32220000000000004,有误差
// 计算 0.1 + 0.2222 的值 0.1 小数点后 1 位,0.2222 小数点后 4 位,因此最少要放大 10^4 倍
(0.1 * 10000 + 0.2222 * 10000) / 10000 // 结果为 0.3222

退出移动版