Skip to content

链式计算 API

链式计算 API,采用函数返回函数的设计,支持流式调用。

导入

js
import { cadd, csub, cmul, cdiv, cmod, cpow, cidiv } from 'a-calc'

起始函数

cadd(...nums)

加法起始,所有参数相加。

js
cadd(1, 2, 3)()  // "6"

csub(first, ...rest)

减法起始,第一个参数减去其余参数。

js
csub(100, 20, 10)()  // "70"

cmul(...nums)

乘法起始,所有参数相乘。

js
cmul(2, 3, 4)()  // "24"

cdiv(first, ...rest)

除法起始,第一个参数除以其余参数。

js
cdiv(100, 2, 5)()  // "10"

cmod(first, ...rest)

取模起始,依次取模。

js
cmod(17, 5)()  // "2"

cpow(first, ...rest)

幂运算起始,依次求幂。

js
cpow(2, 3, 2)()  // "64"  (2^3)^2

cidiv(first, ...rest)

整除起始,依次整除。

js
cidiv(17, 5)()  // "3"

链式方法

链式方法挂载在返回的函数对象上,不带 c 前缀

方法说明
.add(...nums)加上所有参数
.sub(...nums)减去所有参数
.mul(...nums)乘以所有参数
.div(...nums)除以所有参数
.mod(...nums)依次取模
.pow(...nums)依次求幂
.idiv(...nums)依次整除
js
cadd(10).add(5).mul(2).sub(10)()  // "20"

输出

最后调用函数输出结果:

js
// 无参数 - 返回字符串
cadd(1, 2)()  // "3"

// 带格式化参数
cadd(1000, 234)('=2,')  // "1,234.00"
cmul(0.5, 0.8)('%=2')   // "40.00%"

参数类型

所有方法接受 number | string 类型:

js
cadd(1, '2', 3)()      // "6"
cmul('100', '1.1')()   // "110"

错误处理

链式计算中的错误会在最终调用时返回:

js
import { set_config } from 'a-calc'

// 设置错误返回值
set_config({ _error: '-' })

// 除以零返回错误值
cdiv(100, 0)()                    // "-"
cdiv(100, 2).div(0).mul(5)()      // "-"

实际应用

价格计算

js
// 原价 100,打 8 折,再减 10 元
cadd(100).mul(0.8).sub(10)()  // "70"

税费计算

js
// 商品价格加税后再加运费
const price = 200
const taxRate = 0.13
const shipping = 15

cmul(price, 1 + taxRate).add(shipping)('=2')  // "241.00"

复合运算

js
// (100 + 50) × 2 ÷ 3
cadd(100, 50).mul(2).div(3)('=2')  // "100.00"

类型定义

ts
type ChainFunction = {
  (format?: string): string
  add(...nums: (number | string)[]): ChainFunction
  sub(...nums: (number | string)[]): ChainFunction
  mul(...nums: (number | string)[]): ChainFunction
  div(...nums: (number | string)[]): ChainFunction
  mod(...nums: (number | string)[]): ChainFunction
  pow(...nums: (number | string)[]): ChainFunction
  idiv(...nums: (number | string)[]): ChainFunction
}

function cadd(...nums: (number | string)[]): ChainFunction
function csub(first: number | string, ...rest: (number | string)[]): ChainFunction
function cmul(...nums: (number | string)[]): ChainFunction
function cdiv(first: number | string, ...rest: (number | string)[]): ChainFunction
function cmod(first: number | string, ...rest: (number | string)[]): ChainFunction
function cpow(first: number | string, ...rest: (number | string)[]): ChainFunction
function cidiv(first: number | string, ...rest: (number | string)[]): ChainFunction

基于 MIT 许可发布