鱼C论坛

 找回密码
 立即注册
查看: 556|回复: 0

[知识点备忘] 第008讲:数学运算

[复制链接]
发表于 2024-7-29 04:26:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第008讲:数学运算



0. 本节视频




1. 算术运算符

基本的算术运算符:

  • 加法运算符(+):将两个数值相加,或者将数值与字符串拼接。
  • 减法运算符(-):将两个数值相减。
  • 乘法运算符(*):将两个数值相乘。
  • 除法运算符(/):将两个数值相除,如果除数为 0,则结果为 Infinity 或 -Infinity。
  • 取余运算符(%):返回两数相除的余数。
  • 自增运算符(++):将变量的值增加 1。
  • 自减运算符(--):将变量的值减少 1。
  • 求幂运算符(**):计算一个数的另一个数次幂。

注意,这个自增自减运算符,它放在操作数的前面和后面,效果是不一样的:

  1. > ++a
  2. 5
  3. > a
  4. 5
  5. > --b
  6. 3
  7. > b
  8. 3
复制代码

坦白讲,这个一不小心,就很容易被忽悠瘸了:

  1. > a = 3;
  2. 3
  3. > b = 5;
  4. 5
  5. > result = ++a + b--;
  6. 9
复制代码

解释一下:

++a 是一个前缀自增运算符,它首先将变量 a 的值从 3 增加到 4,然后使用这个增加后的值(4)进行后续的运算。

而 b-- 是一个后缀自减运算符,它首先使用变量 b 当前的值(5)进行运算,然后再将 b 的值从 5 减少到 4。

因此,整个表达式的运算相当于 4 + 5,结果为 9。

简而言之:

  • 前缀自增、自减运算符是先改变变量的值,然后将更新后的值用于表达式求值。
  • 后缀自增、自减运算符先将变量的当前值用于表达式求值,然后再修改变量的值。

在实际编程中,为了提高代码的可读性和避免混淆,通常建议将自增、自减操作与其他操作分开写,而不是合并在一个表达式中。

比如这里,我们可以拆分为三条语句:

  1. > ++a;
  2. > result = a + b;
  3. > b--;
复制代码

这样就更加清晰明了。


2. 数学运算

JavaScript 还提供了一个 Math 对象,包含了许多用于执行数学运算的工具。

比如求绝对值,可以使用 Math.abs():

  1. > Math.abs(250)
  2. 250
  3. > Math.abs(-250)
  4. 250
复制代码

四舍五入可以使用 Math.round():

  1. > Math.round(1.68)
  2. 2
  3. > Math.round(1.28)
  4. 1
复制代码

向上取整使用 Math.ceil():

  1. > Math.ceil(1.68)
  2. 2
  3. > Math.ceil(1.28)
  4. 2
复制代码

向下取整用 Math.floor():

  1. > Math.floor(1.68)
  2. 1
  3. > Math.floor(1.28)
  4. 1
复制代码

求一组数值的最大、最小值,使用 Math.max() 和 Math.min() 即可:

  1. > Math.max(1, 4, 2, 8, 5, 7)
  2. 8
  3. > Math.min(1, 4, 2, 8, 5, 7)
  4. 1
复制代码

求幂除了使用算术运算符,也可以使用 Math.pow() 函数:

  1. > Math.pow(2, 3)
  2. 8
  3. > Math.pow(2, -2)
  4. 0.25
  5. > Math.pow(8, 1/3)
  6. 2
复制代码

还有一些重要的数学常量,在 Math 对象中是有存储的:

  1. > Math.E
  2. 2.718281828459045
  3. > Math.PI
  4. 3.141592653589793
复制代码

像求对数、三角函数、双曲线这些,Math 也支持:

  1. > Math
  2. Math {abs: ƒ, acos: ƒ, acosh: ƒ, asin: ƒ, asinh: ƒ, …}
  3. E: 2.718281828459045
  4. LN2: 0.6931471805599453
  5. LN10: 2.302585092994046
  6. LOG2E: 1.4426950408889634
  7. LOG10E: 0.4342944819032518
  8. PI: 3.141592653589793
  9. SQRT1_2: 0.7071067811865476
  10. SQRT2: 1.4142135623730951
  11. abs: abs()
  12. acos: acos()
  13. acosh: acosh()
  14. asin: asin()
  15. asinh: asinh()
  16. atan: atan()
  17. atan2: atan2()
  18. atanh: atanh()
  19. cbrt: cbrt()
  20. ceil: ceil()
  21. clz32: clz32()
  22. cos: cos()
  23. cosh: cosh()
  24. exp: exp()
  25. expm1: expm1()
  26. floor: floor()
  27. fround: fround()
  28. hypot: hypot()
  29. imul: imul()
  30. log: log()
  31. log1p: log1p()
  32. log2: log2()
  33. log10: log10()
  34. max: max()
  35. min: min()
  36. pow: pow()
  37. random: random()
  38. round: round()
  39. sign: sign()
  40. sin: sin()
  41. sinh: sinh()
  42. sqrt: sqrt()
  43. tan: tan()
  44. tanh: tanh()
  45. trunc: trunc()
  46. Symbol(Symbol.toStringTag): "Math"
  47. [[Prototype]]: Object
复制代码

有鱼油说太多了,记不住,完全记不住

小甲鱼把这些的用法和案例都整理好放在速查宝典 -> Math对象用法大合集

大家可以收藏一下,这样在用到的时候打开查看就可以了。


3. 生成随机数

这里还有一个需要特别讲解的,那就是 Math.random(),用于生成一个介于 0 到 1 之间的伪随机数(包含 0,但不包含 1):

  1. > Math.random()
  2. 0.9486286273489641
  3. > Math.random()
  4. 0.28805359058967417
  5. > Math.random()
  6. 0.3161413574312941
复制代码

有同学说,就只能生成 0 到 1 之间的随机数啊,那有啥用,我想做个双色球生成器都不行?!

非也非也,只需要通过一些简单的数学运算,我们就可以调整这个范围以适应不同的应用场景。

比如我们要生成 100 以内的随机数,那么只需要将 Math.random() 的结果乘以 100 即可:

  1. > Math.random() * 100
  2. 60.80800295589466
  3. > Math.random() * 100
  4. 37.289265999333175
  5. > Math.random() * 100
  6. 11.299477450125428
复制代码

如果需要生成一个 100 到 250 之间的随机数,大家觉得应该怎么做?

没错,将结果先乘以 150,然后再加上 100:

  1. > Math.random() * 150 + 100
  2. 242.83116906172276
  3. > Math.random() * 150 + 100
  4. 188.45630664278843
  5. > Math.random() * 150 + 100
  6. 203.65609232312494
复制代码

如果想要整数呢?

容易!使用 Math.floor() 再加工一下就好了:

  1. > Math.floor(Math.random() * 150 + 100)
  2. 107
  3. > Math.floor(Math.random() * 150 + 100)
  4. 248
  5. > Math.floor(Math.random() * 150 + 100)
  6. 152
复制代码

注意:

Math.random() 生成的随机数是伪随机的,它生成的数字虽然表现出随机性,但实际上是由一个确定性的数学公式生成的,因此严格来说并不是真正的随机数。

对于一些对随机性要求严格的场景(如密码学、安全领域),可能需要使用更加安全和真正随机的随机数生成器。


4. 思维导图

08 - 数学运算.png

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-2 00:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表