# AutoUnit English documentation is translated by AI. If you have any questions about the content, please refer to the [Chinese document](./README.zh.md). Contributions to improve translations are welcome.
`AutoUnit` is a utility class for automatic unit conversion, supporting custom unit systems, thresholds, and decimal place configurations. - Automatically selects appropriate units to output formatted strings - Reverse parses numeric values from unit-formatted strings - Quickly build any unit system - Supports high-precision calculations - Supports calculations beyond JS safe number ranges ## Quick Links - [Quick Start](#quick-start) - [Best Practices](#best-practices) - [API](#api) - [Contributing](#contributing) ## Quick Start - **Fixed-base Units** ```ts import AutoUnit from 'auto-unit'; const autoUnit = new AutoUnit([ 'B', 'KB', 'MB', 'GB', 'TB', 'PB' ], { baseDigit: 1024, }) console.log(autoUnit.format(1024 * 1024 * 100)) // 100MB ``` > The `baseDigit` parameter represents the conversion base between units. For example, 1024 means 1KB equals 1024 bytes. - **Variable-base Units** ```ts import AutoUnit from 'auto-unit'; const autoUnit = new AutoUnit([ 'mm', 10, 'cm', 100, 'm', 1e3, 'km' ]) console.log(autoUnit.format(1000)) // 1m ``` > You can customize conversion bases between units. For example, [ 'mm', 10, 'cm', 100, 'm', 1e3, 'km' ] means: > 1 cm equals 10 mm, 1 m equals 100 cm, and 1 km equals 1000 m. - **High Precision & Large Integers** ```ts import AutoUnit from 'auto-unit'; const units = [ 'mm', 10, 'cm', 100, 'm', 1e3, 'km', 1e3, 'Mm', 1e3, 'Gm', 1e3, 'Tm' ] const autoUnit = new AutoUnit(units, { highPrecision: true }) console.log(autoUnit.format(1e18)) // 1000Tm ``` > The `highPrecision` parameter enables high-precision mode using `decimal.js`. It supports `number`, `string`, `BigInt`, and `Decimal` inputs. ## Best Practices - For most use cases requiring formatted unit strings, consider wrapping `format`: ```ts import AutoUnit from 'auto-unit'; const autoUnit = new AutoUnit([ 'B', 'KB', 'MB', 'GB', 'TB', 'PB' ], { baseDigit: 1024, }) export const formatFileSize = (num: number) => { return autoUnit.format(num) } ``` - In modular projects (e.g., React/Vue), pre-initialize unit systems globally (e.g., in `utils/units.ts`) rather than recreating them per component. ## API ### **Constructor** ```ts class AutoUnit { constructor( readonly units: (string | number)[], option: AutoUnitOptions