javascript数字如何处理_如何执行数学运算

JavaScript数字为64位浮点数,需注意精度问题(如0.1+0.2≠0.3);支持+−/%*运算符,隐式转换易出错,推荐显式转换;用Number.isNaN()、isFinite()处理NaN/Infinity;Math对象提供舍入、极值、随机数等方法;小数比较宜用误差容忍,显示用toFixed()。

JavaScript 中的数字处理和数学运算主要依靠内置的 Number 类型、算术运算符以及 Math 对象。关键在于理解 JavaScript 只有一种数字类型(64 位双精度浮点数),没有整型/浮点型区分,因此要注意精度问题(比如 0.1 + 0.2 !== 0.3)。

基础算术运算:用好 + - * / % **

JavaScript 支持常见的二元算术运算符:

  • + 加法(也用于字符串拼接,注意类型隐式转换)
  • - 减法
  • * 乘法
  • / 除法
  • % 取余(不是取模,对负数结果符号跟随被除数)
  • ** 幂运算(ES2016 引入,如 2 ** 3 得 8)

注意:运算前会尝试将操作数转为数字,例如 "5" - "2"3,但 "5" + "2" 是字符串拼接得 "52";建议用 Number()parseInt() 或一元加号 + 显式转换。

安全处理数字:避免 NaN 和 Infinity

无效运算(如 0 / 0parseInt("abc"))会返回 NaN,而 1 / 0Infinity。它们有特殊行为:

  • NaN !== NaN,必须用 isNaN() 或更推荐的 Number.isNaN() 判断
  • Infinity 可参与计算(如 Infinity + 1 === Infinity),可用 isFinite() 检查是否为有限数
  • 推荐用 Number(value) 转换并配合 Number.isFinite() 验证有效性,比 parseFloat 更严格(不忽略开头空格或尾部字母)

常用数学函数:善用 Math 对象

Math 是静态对象,提供大量工具方法:

  • 舍入:Math.round(2.6)3Math.floor() 向下,Math.ceil() 向上,Math.trunc() 去小数部分
  • 极值:Math.max(1, 5, 3)5,支持展开语法 Math.max(...arr)
  • 随机数:Math.random() 返回 [0, 1) 的浮点数;获取 [min, max] 整数: Math.floor(Math.random() * (max - min + 1)) + min
  • 其他:Math.abs()Math.sqrt()Math.pow()、三角函数(弧度制)、Math.log()

处理精度问题:小数运算不“精确”怎么办?

由于浮点数存储机制,0.1 + 0.2 === 0.30000000000000004。实用应对方式:

  • 显示时用 toFixed(n) 格式化(返回字符串,注意四舍五入)
  • 比较时用误差容忍(如 Math.abs(a - b) )
  • 金融计算等高精度场景,改用字符串处理或专用库(如 decimal.jsbig.js
  • 整数运算可先放大再缩小,例如 (0.1 * 10 + 0.2 * 10) / 10 === 0.3