a-calc
Version:
A very powerful and easy-to-use number precision calculation and formatting library.
155 lines (113 loc) β’ 4.66 kB
Markdown
# a-calc
**π Full Documentation: [https://a-calc.vercel.app/](https://a-calc.vercel.app/)**
[](https://www.npmjs.com/package/a-calc) [](https://www.npmjs.com/package/a-calc)
A powerful and easy-to-use JavaScript library for precision arithmetic and number formatting.
## Features
- **Precision Arithmetic** β Solves JavaScript floating-point issues (`0.1 + 0.2 = 0.3`)
- **Rich Formatting** β Thousands separators, percentages, fractions, scientific notation, compact format
- **Unit Arithmetic** β Calculate with units attached to numbers
- **Chain API** β Fluent chainable arithmetic (`cadd(1,2).mul(3)()`)
- **Aggregation** β `calc_sum`, `calc_avg`, `calc_max`, `calc_min`, `calc_count`
- **Multiple Compute Modes** β Decimal (default), BigInt, WASM
- **High Performance** β Fastest among similar libraries
- **TypeScript** β Full type support with smart inference
## Install
```bash
npm install a-calc
```
## Quick Start
```javascript
import { calc, fmt, cadd } from "a-calc";
// Precision arithmetic
calc("0.1 + 0.2"); // "0.3"
calc("0.1 + 0.2 * 0.3 / 0.4 * (0.5 + 0.6)"); // "0.265"
// Variables
calc("a + b", { a: 1, b: 2 }); // "3"
calc("price * qty | =2", { price: 9.9, qty: 3 }); // "29.70"
// Formatting
calc("1234567 | ,"); // "1,234,567"
calc("1234567 | =2,"); // "1,234,567.00"
calc("1234567 | !c"); // "1.23M"
// Direct formatting (v3.0)
fmt(1234567, "=2,"); // "1,234,567.00"
fmt(1234567, "!c"); // "1.23M"
// Chain API (v3.0)
cadd(100, 200, 300)(); // "600"
cadd(100, 200).mul(2)("=2,"); // "600.00"
// Aggregation (v3.0)
import { calc_sum, calc_avg, calc_max, calc_min } from "a-calc";
calc_sum("price", [{ price: 10 }, { price: 20 }]); // "30"
calc_avg("score", [{ score: 80 }, { score: 90 }]); // "85"
```
## Core API
### calc(expr, options?)
Evaluate expression with optional variables and formatting.
```javascript
calc("a * b + c", { a: 1, b: 2, c: 3 }); // "5"
calc("100 + 200 | ,"); // "300"
calc("0.1% + 0.2%", { _unit: true }); // "0.3%"
calc("a > 10 ? a * 0.9 : a", { a: 15 }); // "13.5"
```
### fmt(value, format?)
Format a number directly (v3.0 new API).
```javascript
fmt(1234567, ","); // "1,234,567"
fmt(0.1234, "=2"); // "0.12"
fmt(1234567, "!c:wan"); // "123.45δΈ"
```
### Formatting Reference
| Token | Description | Example |
|-------|-------------|---------|
| `=N` | Fixed N decimals | `=2` β "1.00" |
| `<=N` | At most N decimals | `<=2` β "1.1" |
| `>=N` | At least N decimals | `>=2` β "1.00" |
| `,` | Thousands separator | "1,000" |
| `+` | Show positive sign | "+1" |
| `%%` | Percentage | "50%" |
| `//` | Fraction | "1/2" |
| `!e` | Scientific notation | "1e+3" |
| `!n` | Output as number | returns `number` |
| `!c` | Compact format | "1.23M" |
| `!c:preset` | Compact preset | `!c:wan` β "1.23δΈ" |
| `!t:preset` | Thousands preset | `!t:eu` β "1.234,50" |
| `!i:N` | Integer zero-padding | `!i:3` β "005" |
| `~-` | Truncate (default) | |
| `~5` | Round half up | |
| `~6` | Banker's rounding | |
| `~+` | Round up | |
### Chain API (v3.0)
```javascript
import { cadd, csub, cmul, cdiv } from "a-calc";
cadd(1, 2, 3)(); // "6"
cadd(10).sub(3).mul(2)(); // "14"
cadd(1000, 2000)("=2,"); // "3,000.00"
```
### Standalone Arithmetic (v3.0)
```javascript
import { add, sub, mul, div } from "a-calc";
add(0.1, 0.2); // 0.3 (number)
mul(3, 4, 5); // 60 (number)
// String output with r-prefix
import { radd, rmul } from "a-calc";
radd("0.1", "0.2"); // "0.3" (string)
```
### Configuration (v3.0)
```javascript
import { set_config, reset_config } from "a-calc";
set_config({ _error: 0 }); // Error returns 0 instead of "-"
set_config({ _fmt: "=2," }); // Global default format
set_config({ _compact_default: "wan" }); // Default compact preset
reset_config(); // Reset all
```
## Performance
| Library | 50,000 ops | 500,000 ops |
|---------|-----------|------------|
| **a-calc** | 423ms | 3650ms |
| mathjs@13.0.2 | 610ms | 5724ms |
| math-expression-evaluator | 701ms | 6764ms |
| mathjs@12.4.3 | 3791ms | 36948ms |
## Documentation
For complete API reference, advanced features (unit conversion, compute modes, format groups, etc.), visit:
**π [https://a-calc.vercel.app/](https://a-calc.vercel.app/)**
## License
[MIT](./LICENSE)