内置数学函数
a-calc 3.x 提供了丰富的内置数学函数,涵盖三角函数、指数对数、取整运算、统计函数等多个类别。
三角函数
基本三角函数
默认使用角度制(degrees),可通过 set_config 切换为弧度制。
| 函数 | 说明 | 示例 |
|---|---|---|
sin(x) | 正弦 | sin(90) → 1 |
cos(x) | 余弦 | cos(0) → 1 |
tan(x) | 正切 | tan(45) → 1 |
javascript
import { calc } from 'a-calc'
// 常用角度的精确值
calc('sin(0)') // '0'
calc('sin(30)') // '0.5'
calc('sin(45)') // '0.7071067811865476' (√2/2)
calc('sin(60)') // '0.8660254037844386' (√3/2)
calc('sin(90)') // '1'
calc('sin(180)') // '0'
calc('cos(0)') // '1'
calc('cos(60)') // '0.5'
calc('cos(90)') // '0'
calc('tan(45)') // '1'
calc('tan(0)') // '0'注意
tan(90) 和 tan(270) 未定义,调用会抛出错误。
反三角函数
返回值同样遵循当前角度单位设置。
| 函数 | 说明 | 定义域 | 值域(角度制) |
|---|---|---|---|
asin(x) | 反正弦 | [-1, 1] | [-90°, 90°] |
acos(x) | 反余弦 | [-1, 1] | [0°, 180°] |
atan(x) | 反正切 | (-∞, +∞) | (-90°, 90°) |
atan2(y, x) | 二参数反正切 | (-∞, +∞) | (-180°, 180°] |
javascript
calc('asin(0.5)') // '30' (角度)
calc('asin(1)') // '90'
calc('acos(0.5)') // '60'
calc('atan(1)') // '45'
calc('atan2(1, 1)') // '45'双曲函数
| 函数 | 说明 |
|---|---|
sinh(x) | 双曲正弦 |
cosh(x) | 双曲余弦 |
tanh(x) | 双曲正切 |
asinh(x) | 反双曲正弦 |
acosh(x) | 反双曲余弦 |
atanh(x) | 反双曲正切 |
javascript
calc('sinh(0)') // '0'
calc('cosh(0)') // '1'
calc('tanh(0)') // '0'角度单位设置
通过 set_config 设置全局角度单位:
javascript
import { calc, set_config, get_config } from 'a-calc'
// 默认使用角度制
calc('sin(90)') // '1'
// 切换到弧度制
set_config({ _angle_unit: 'rad' })
calc('sin(3.14159265358979 / 2)') // 约为 '1'
// 切换回角度制
set_config({ _angle_unit: 'deg' })
calc('sin(90)') // '1'
// 查看当前设置
get_config('_angle_unit') // 'deg'指数与对数
| 函数 | 说明 | 示例 |
|---|---|---|
exp(x) | e 的 x 次方 | exp(1) → 2.718... |
log(x) | 自然对数 (ln) | log(2.718...) → 1 |
ln(x) | 自然对数(log 的别名) | ln(e()) → 1 |
log10(x) | 以 10 为底的对数 | log10(100) → 2 |
log2(x) | 以 2 为底的对数 | log2(8) → 3 |
javascript
calc('exp(1)') // '2.7182818284590452...'
calc('exp(0)') // '1'
calc('log(e())') // '1'
calc('ln(e())') // '1'
calc('log10(1000)') // '3'
calc('log2(256)') // '8'幂运算与根
| 函数 | 说明 | 示例 |
|---|---|---|
pow(x, y) | x 的 y 次方 | pow(2, 10) → 1024 |
sqrt(x) | 平方根 | sqrt(16) → 4 |
cbrt(x) | 立方根 | cbrt(27) → 3 |
javascript
calc('pow(2, 8)') // '256'
calc('pow(10, -2)') // '0.01'
calc('sqrt(2)') // '1.4142135623730951...'
calc('sqrt(144)') // '12'
calc('cbrt(8)') // '2'
calc('cbrt(-8)') // '-2' (支持负数)提示
pow(x, y) 等价于运算符 x ** y
取整函数
| 函数 | 说明 | 示例 |
|---|---|---|
floor(x) | 向下取整(地板) | floor(3.7) → 3 |
ceil(x) | 向上取整(天花板) | ceil(3.2) → 4 |
round(x) | 四舍五入 | round(3.5) → 4 |
trunc(x) | 截断小数(向零取整) | trunc(-3.7) → -3 |
javascript
// 正数
calc('floor(3.7)') // '3'
calc('ceil(3.2)') // '4'
calc('round(3.5)') // '4'
calc('trunc(3.9)') // '3'
// 负数
calc('floor(-3.2)') // '-4' (更小)
calc('ceil(-3.7)') // '-3' (更大)
calc('round(-3.5)') // '-3'
calc('trunc(-3.9)') // '-3' (向零)绝对值与符号
| 函数 | 说明 | 示例 |
|---|---|---|
abs(x) | 绝对值 | abs(-5) → 5 |
sign(x) | 符号函数 | sign(-5) → -1 |
javascript
calc('abs(-123)') // '123'
calc('abs(456)') // '456'
calc('abs(0)') // '0'
calc('sign(-100)') // '-1'
calc('sign(0)') // '0'
calc('sign(100)') // '1'统计函数
| 函数 | 说明 | 示例 |
|---|---|---|
max(a, b, ...) | 最大值 | max(1, 5, 3) → 5 |
min(a, b, ...) | 最小值 | min(1, 5, 3) → 1 |
clamp(x, min, max) | 限制在范围内 | clamp(150, 0, 100) → 100 |
javascript
// 最大最小值
calc('max(1, 2, 3, 4, 5)') // '5'
calc('min(1, 2, 3, 4, 5)') // '1'
calc('max(-10, -5, -1)') // '-1'
calc('min(-10, -5, -1)') // '-10'
// 使用变量
calc('max(a, b, c)', { a: 10, b: 25, c: 15 }) // '25'
// clamp 限制范围
calc('clamp(50, 0, 100)') // '50' (在范围内)
calc('clamp(150, 0, 100)') // '100' (超过上限)
calc('clamp(-50, 0, 100)') // '0' (低于下限)
// clamp 实际应用
calc('clamp(score, 0, 100)', { score: 120 }) // '100'常量函数
| 函数 | 说明 | 值 |
|---|---|---|
pi() | 圆周率 π | 3.1415926535897932... |
e() | 自然常数 e | 2.7182818284590452... |
javascript
calc('pi()') // '3.1415926535897932384626433832795...'
calc('pi() | =5') // '3.14159' (格式化)
calc('e()') // '2.7182818284590452353602874713527...'
calc('e() | <=2') // '2.71' (格式化)
// 用于计算
calc('2 * pi() * r', { r: 5 }) // 圆周长
calc('pi() * r ** 2', { r: 3 }) // 圆面积条件函数
| 函数 | 说明 | 示例 |
|---|---|---|
if(cond, t, f) | 条件判断 | if(x>0, x, 0) |
random() | 随机数 [0, 1) | random() |
javascript
// if 条件函数
calc('if(x > 0, x, 0)', { x: 5 }) // '5'
calc('if(x > 0, x, 0)', { x: -3 }) // '0'
// 嵌套 if
calc('if(score >= 90, "A", if(score >= 60, "B", "C"))', { score: 85 })
// 'B'
// random 生成 [0, 1) 的随机数
calc('random()') // 例如 '0.7234567891234567'
// 生成指定范围的随机数
calc('floor(random() * 100)') // 0-99 的整数
calc('random() * (max - min) + min', { min: 10, max: 50 }) // 10-50函数组合示例
几何计算
javascript
// 勾股定理
calc('sqrt(pow(a, 2) + pow(b, 2))', { a: 3, b: 4 }) // '5'
// 圆面积
calc('pi() * pow(r, 2)', { r: 5 }) // '78.5398...'
// 球体积
calc('4/3 * pi() * pow(r, 3)', { r: 3 }) // '113.0973...'三角计算
javascript
// 已知两边和夹角求第三边(余弦定理)
calc('sqrt(pow(a,2) + pow(b,2) - 2*a*b*cos(C))', { a: 5, b: 7, C: 60 })
// 弧度角度转换
calc('degrees * pi() / 180', { degrees: 90 }) // 转为弧度数据处理
javascript
// 百分比计算
calc('round(value / total * 100)', { value: 75, total: 200 }) // '38'
// 平均值
calc('(a + b + c) / 3', { a: 10, b: 20, c: 30 }) // '20'
// 标准化到 0-1 范围
calc('(value - min) / (max - min)', { value: 75, min: 0, max: 100 })金融计算
javascript
// 复利计算
calc('principal * pow(1 + rate, years)', {
principal: 10000,
rate: 0.05,
years: 10
}) // 约 16288.95
// 月供计算 (PMT 公式简化版)
calc('loan * rate * pow(1+rate, months) / (pow(1+rate, months) - 1)', {
loan: 1000000,
rate: 0.004, // 月利率
months: 360 // 30年
})精度说明
a-calc 使用 Decimal.js 进行高精度计算,默认精度为 50 位有效数字:
javascript
// 高精度计算
calc('pi()')
// '3.1415926535897932384626433832795028841971693993751'
calc('sqrt(2)')
// '1.4142135623730950488016887242096980785696718753769'
// 避免浮点数精度问题
calc('0.1 + 0.2') // '0.3' (不是 0.30000000000000004)注意事项
- 角度单位:三角函数默认使用角度制,可通过
set_config({ _angle_unit: 'rad' })切换为弧度制 - 函数名大小写:函数名区分大小写,
sin和SIN是不同的 - 参数验证:某些函数对参数有限制(如
sqrt不接受负数,tan(90)未定义) - 精度限制:虽然精度很高,但仍有上限,极端情况可能出现精度损失
- 性能考虑:复杂的嵌套计算可能影响性能