Math 模块
Math 模块将标准数值函数组合在一起——符号和绝对值、三角函数、指数和对数、平方根、按指定小数位数舍入以及伪随机数生成。大多数成员返回 Double,因此中间结果在写回较窄的变量之前保持浮点形式。
符号和绝对值
Abs 返回其参数的绝对值——与零的距离,丢弃符号——并保留参数的数据类型,因此 Abs(-3#) 是 Double,Abs(-3) 是 Integer。Sgn 是其补充:丢弃绝对值,仅返回符号,为 -1、0 或 +1。两者共同将一个数分解为符号和绝对值。
Debug.Print Abs(-7.5) ' 7.5
Debug.Print Sgn(-7.5) ' -1三角函数
Sin、Cos 和 Tan 接受以弧度表示的角度,返回其正弦、余弦和正切。Atn 反向操作——给定正切值,返回该正切值对应的角度,范围为 -pi/2 到 pi/2。这四个函数均以弧度工作;将角度乘以 pi / 180 转换为弧度,或将弧度乘以 180 / pi 转换回角度。
Const Pi As Double = 3.14159265358979
Debug.Print Sin(Pi / 2) ' 1
Debug.Print Atn(1) * 4 ' 3.14159265358979 — pi其他反三角函数(反正弦、反余弦)和双曲函数未直接提供,但每个都可以从 Atn、Log、Exp 和 Sqr 用几行代码推导——参见 Atn、Log 和 Cos 的详细示例。
指数和对数
Exp 将 e(≈ 2.71828)提升到指定幂次,Log 是其逆运算,返回自然(以 e 为底)对数。要计算其他底数的对数,除以该底数的 Log:Log(x) / Log(10) 为以 10 为底,Log(x) / Log(2) 为以 2 为底,依此类推。
Debug.Print Exp(1) ' 2.71828182845905 — e
Debug.Print Log(100) / Log(10) ' 2 — base-10 log of 100平方根
Sqr 返回非负数的平方根,以 Double 表示。传入负值会引发运行时错误而非返回复数或 NaN 结果;如果计算可能合法地产生负输入,请用 Sgn 或与零的比较来保护调用。
舍入
Round 使用银行家舍入法将数字舍入到指定小数位数——当值恰好位于两个可能结果的中间时,舍入到最接近的偶数数字,因此 Round(0.5, 0) 为 0,Round(1.5, 0) 为 2。这避免了始终向上舍入的系统偏差,与 VBA 的行为一致。对于截断而非舍入,参见 Conversion 模块中的 Int 和 Fix;对于舍入到特定整数类型的窄化转换,参见 CInt 和 CLng。
随机数
Randomize 为伪随机数生成器设定种子,Rnd 从中提取,返回半开区间 [0, 1) 内的 Single。如果不显式调用 Randomize,每次程序运行时 Rnd 都会生成相同的序列——便于可重复测试;对于不可预测的输出,在启动时不带参数调用一次 Randomize,以便使用系统计时器作为种子。
在 lower 和 upper(含)之间均匀分布整数的标准惯用法结合了 Rnd 和 Int:
Randomize
Dim Roll As Long
Roll = Int((6 - 1 + 1) * Rnd + 1) ' a die roll, 1..6