Skip to content

A Javascript library for encoding numbers to any base with various formatting options.

License

Notifications You must be signed in to change notification settings

2sh/base-formatter

Repository files navigation

Base Formatter

A Javascript library for encoding numbers to any base with various formatting options.

Features

  • Encode and decode to and from any radix/base.
  • Use specified symbols (digits, sign, radix character, padding, separators) to represent the encoded number.
  • Adjust integer and fractions lengths.
  • Adding "thousands" grouping separators, grouping at adjustable lengths.
  • A choice of various rounding modes.
  • Scientific and engineering notation.
  • Alternatively output as a numeral object, to represent numbers in bases without the use of digit symbols.
  • Encoding of decimal.js values for more precision.

Documentation

  • The API reference can be found here.
    • BaseFormatter - Makes use of specified symbols and formatting options to represent the numbers.
    • BaseConverter - Alternatively represents numbers as numberal objects.

Installation

Installing the NPM package:

  • Yarn
    yarn add base-formatter
    
  • NPM
    npm install base-formatter
    

Usage

Importing

  • ES module
    import { BaseFormatter, BaseConverter } from 'base-formatter'
    // For just the BaseFormatter, simply:
    import BaseFormatter from 'base-formatter'
  • CommonJS
    const { BaseFormatter, BaseConverter } = require('base-formatter')

Examples

const base16Greek = new BaseFormatter('0123456789ΑΒΓΔΕΖ', {radixCharacter: ','})
// or for just the A-F characters, BaseFormatter.hexadecimal({...})
const dozenal = BaseFormatter.dozenal()

dozenal.encode(142) // '↋↊'
dozenal.encode(144) // '100'
dozenal.encode(1/3, {minimumIntegerDigits: 3, minimumFractionDigits: 3}) // '000;400'
dozenal.encode(1.6, {roundingMode: 'ceil', fractionDigits: 0}) // '2'
dozenal.encode(-1.6, {roundingMode: 'floor', fractionDigits: 0}) // '-2'
base16Greek.encode(13) // 'Δ'
base16Greek.encode(5e-6, {notation: 'scientific', maximumFractionDigits: 3}) // '1,Β1e-5'

dozenal.decode('↊;9429e↊') // 667430129664
dozenal.isNumber('↊;9429e↊') // true

// Making use of numeral outputs:
const base120 = new BaseConverter(120)
base120.encode(-1440)
// { isNegative: true, integer: [ 12, 0 ], fraction: [], exponent: 0 }
base120.encode(6347544.3456, {notation: 'scientific', maximumFractionDigits: 5})
// { isNegative: false, integer: [ 3 ], fraction: [ 80, 96, 24, 41, 57 ], exponent: 3 }
base120.decode({ isNegative: false, integer: [ 3 ], fraction: [ 80, 96, 24, 41, 57 ], exponent: 3 })
// 6347544.345625