Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
来源于实际业务的字符串四则运算的库, 可解决以下问题:
0.1% + 2%
-2e3 + 6
支持的运算符 : + - * / %
npm install a-calc
commonjs
const {calc, fmt} = require("a-calc")
// 或者
const {calc, fmt} = require("a-calc/cjs") // 注意这个写法是明确指定使用cjs版本这是有意义的, 有些打包工具会对语法做转换, 直接写 a-calc 不好使(nuxt.js就是), 那就换成 a-calc/cjs 试试
es module
import {calc, fmt} from "a-calc"
// 或者
const {calc, fmt} from "a-calc/es"
browser
<script src="node_modules/a-calc/browser/index.js"></script>
<script>
const {calc, fmt} = a_calc
</script>
calc("0.1 + 0.2") // 0.3
// 复杂一点的计算
calc("0.1 + 0.2 * 0.3 / 0.4 * (0.5 + 0.6)") // 0.265
// 科学计数法的计算
calc("-2e2 + 3e+2") // 100
计算后的值为精准值且不会出现科学计数法
let a = 0.000001
let b = 888.789
calc("a + b", {a,b}) // 0.000001 + 888.789 = 888.789001
calc("a * (b + c) % d + 7.123", [
{a: 1, b: 2},
{c: 3, d: 4}
]) // 8.123
// 复杂一点的
calc("1 + o.a / arr[0].d",{
o: { a: 2 },
arr: [{ d: 8 }]
}) // 1.25
calc("a + b - c",[
{a: 1},
{b: 2, c: 3}
])
实际情况不总是那么理想, 也许我们不得不计算两个百分比数字, 幸好现在a-calc支持这些操作, 但是请注意,单位会从第一个携带单位的数字上取, 后面的单位会被忽略
// 要特别注意 _unit是必须的, 且不是默认开启的, 这是因为带单位的计算会额外做一些操作, 相比之下单纯的数字计算更快
calc("1 + 2%", {_unit: true}) // 3%
calc("1.123$$$ + 2.88% | + =6", {_unit: true}) // +4.003000$$$
// 操作小数位数
calc("0.1 + 0.2 | =2") // 0.30
calc("0.11111 + 0.11111 | <=4") // 0.2222
calc("0.11 + 0.11 | <=4") // 0.22
calc("0.1 + 0.2 | >= 5") // 0.30000
calc("0.0000001+ 0.0000001 | >= 5") // 0.0000002
// 格式化的时候对于小数位的操作只支持 >= <= = 三种符号
// 保留正负号
calc("1 + 1 | +") // +2
// 千分位
calc("10000000 + 100000000 | ,") // 110,000,000
// 同时指定小数位和千分位且保留正负号
calc("10000000 + 100000000 | +,=10") // +110,000,000.0000000000
calc("0.1 | =2") // 0.10
fmt("0.1 | =2") // 0.10
// calc 具备 fmt 的功能, 但是fmt具备更好的语义
fmt("1000000 | ,") // 1,000,000
错误处理
通常直接使用calc做计算要求输入的计算式是完全正确的, 默认 a-calc 不会帮你处理计算式的错误, 这个可以自己做过滤, 但在项目里我们可能不想做这件事情那么就需要额外的高级API, 在输入的计算式有误的时候静默捕获并给出一个合适的返回值
calc("1 + 2sd + d",{
_fillData: {d: 3}, // 从这里数据源对象要赋给 _fillData, 该对象也可以是一个对象数组,此时取数据的时候是依次从数组的项里查找,找到第一个立刻停止
_error: "-", // 计算式出错的时候返回 - 作为替代值
})
// 上面的写法可以简化一下
calc("1 + 2sd + d", {
d: 8,
_error: "-"
}) // 这种简化单纯是为了方便
默认格式化
在实际项目中可以利用默认格式化优化开发体验
calc("111111 + 11111 | ,",{_fmt: "=2"}) // 122,222.00 很显然 , 和 =2 被组合起来了,且表达式中的格式化字符串优先级更高
在项目中编写庞大的第二个参数是不好的, 所以第二个参数你应该想办法固定他, 下面只是一个在VUE项目中的演示
import { calc, fmt } from 'a-calc'
Vue.mixin({
methods: {
calc (expr, obj) {
let dataArr = [this]
let _fmt = undefined
let _error = undefined
if (obj !== undefined) {
dataArr.unshift(obj)
if (obj._fmt !== undefined) {
_fmt = obj._fmt
}
if (obj._error !== undefined) {
_error = obj._error
}
}
return calc(expr, {
_fillData: dataArr,
_error: _error === undefined ? '-' : _error,
_fmt, // 格式化参数在没有字符串格式化的时候才有用
})
},
fmt (expr, obj) {
// 专门格式化的
let dataArr = [this]
let _fmt = undefined
let _error = undefined
if (obj !== undefined) {
dataArr.unshift(obj)
if (obj._fmt !== undefined) {
_fmt = obj._fmt
}
if (obj._error !== undefined) {
_error = obj._error
}
}
return fmt(expr,
{
_fillData: dataArr,
_error: _error === undefined ? '-' : _error,
_fmt,
_unit: true
})
},
},
})
calc("1元", {_unit: true})
或者 fmt("1元 | =2",{_unit: true})
待定
(如果遇到了什么问题, 请第一时间向我发送反馈邮件, 718879459@qq.com 对于bug我会第一时间修复他)
FAQs
A very powerful and easy-to-use number precision calculation and formatting library.
The npm package a-calc receives a total of 17,342 weekly downloads. As such, a-calc popularity was classified as popular.
We found that a-calc demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.