📜  js 如何处理浮点数 2 个十进制数 - Javascript (1)

📅  最后修改于: 2023-12-03 15:17:01.722000             🧑  作者: Mango

JavaScript中如何处理浮点数

JavaScript使用64位浮点数来表示数字,也就是说JavaScript中的数字都是浮点数。这一点与其他编程语言不同,其他语言会将整数和浮点数分开处理。但由于JavaScript的浮点数使用IEEE 754标准,因此在处理小数时可能会遇到一些问题。

浮点数的精度问题

由于浮点数采用二进制表示,而大多数小数的二进制表示是无限循环小数或无限不循环小数,因此使用64位浮点数来表示小数时,会存在精度问题。

例如:

0.1 + 0.2 // 输出 0.30000000000000004

在此例中,本应该输出0.3,但由于计算机使用二进制来表示小数,0.1和0.2在二进制中都是无限循环小数,因此在计算时会出现精度损失。

解决精度问题的方法
1.使用toFixed方法

toFixed方法可以将一个浮点数四舍五入为指定小数位数的字符串。例如:

(0.1 + 0.2).toFixed(1) // 输出 "0.3"

在此例中,使用toFixed(1)将结果四舍五入为1位小数,得到正确的结果"0.3"。

2.使用Math.round方法

Math.round方法可以将一个数字四舍五入为最接近的整数。在解决精度问题时,可以将浮点数乘以10的n次方(n为要保留的小数位数),然后使用Math.round方法将其四舍五入为整数,再将结果除以10的n次方得到保留指定小数位数的浮点数。

例如:

Math.round((0.1 + 0.2) * 10) / 10 // 输出 0.3

在此例中,将0.1和0.2相加得到0.3并乘以10,再使用Math.round方法将其四舍五入为3,并将结果除以10得到正确的结果0.3。

超出范围的浮点数

由于JavaScript使用64位浮点数表示所有数字,因此超出范围的数字将被表示为Infinity或-Infinity。

例如:

1e308 * 2 // 输出 Infinity
NaN

NaN表示“Not a Number”,用于表示非数字的值。NaN是一个特殊值,它不等于任何其他值,包括自身。

例如:

typeof NaN // 输出 "number"
NaN === NaN // 输出 false

NaN主要用于表示由于某些原因而无法得到数字的情况,例如0/0或Infinity - Infinity等。

总结

JavaScript使用64位浮点数来表示所有数字,这在处理小数时可能会存在精度问题。解决精度问题的方法有使用toFixed方法和使用Math.round方法。当数字超出范围时,JavaScript将其表示为Infinity或-Infinity,当无法表示数字时,使用NaN表示。