A unit parser, converter, & combiner in JS
npm install unitz



![Alpha]()
Unitz is a library designed to take in a quantity and unit provided by a user and perform addition, subtraction, conversion, and transformation to human friendly representations.
Unitz will attempt to handle conversions, additions, and subtractions even if the units aren't recognized.
http://clickermonkey.github.io/unitz/
Install via bower install unitz or npm install unitz.
Several classes are implemented - you can even add your own:
- Area
- Digital
- Length
- Rotation
- Time
- Volume
- Weight
Further down this document provides a detailed list of all units supported.
``javascript
// =============================================================================
// Unitz.parse( input )
// =============================================================================
// Valid numbers: 1, 1/2, 1 1/2, 3/2, 1.5, .5, -1 1/2, -1.5, -.5
Unitz.parse('2c'); /*{
value: 2,
unit: 'c',
normal: '2 cups',
unitClass: ... // Unitz.Class instance
group: ... // Unitz.Group instance
}*/
// =============================================================================
// Unitz.parse( input ).convert( toUnit, returnFraction, withUnit, largestDenominator, classlessDenominators )
// =============================================================================
Unitz.parse('2c').convert('tbsp'); // 32
Unitz.parse('2 cup').convert('tbsp', false, true); // '32 tbsp'
Unitz.parse('4 tbsps').convert('cups', true); // {numerator: 1, denominator: 4, string: '1/4', remainder: 1, whole: 0, actual: 0.25, distance: 0, valid: true}
Unitz.parse('4 tbsps').convert('cups', true).string; // '1/4'
Unitz.parse('3 cups').convert('pint', true).string; // '1 1/2 pints'
// =============================================================================
// Unitz.parse( input ).best()
// Unitz.best( input )
// =============================================================================
Unitz.parse('2c').best().normal; // '1 pint'
Unitz.best('12in').normal; // '1 foot'
Unitz.best('1/4 cup').normal; // '2 fluid ounces'
// =============================================================================
// Unitz.compound( input, unitsAllowed )
// =============================================================================
Unitz.compound('2 cups', ['pt', 'c']); // '1 pt'
Unitz.compound('2 cups', ['c', 'tbsp']); // '2 c'
Unitz.compound('0.625 cups', ['c', 'tbsp', 'tsp']); // '1/2 c, 2 tbsp'
Unitz.compound('1.342 cups', ['c', 'tbsp', 'tsp']); // '1 c, 5 tbsp, 1 tsp'
// =============================================================================
// Unitz.combine( a, b, useFractions, abbreviations, largestDenominator )
// =============================================================================
Unitz.combine( '1 cup', '2 cups' ); // '3 cups'
Unitz.combine( '1 pint', '2 cup' ); // '1 quart'
Unitz.combine( '2 bags, 2 cup', '1 pint, 1 bag' ); // '3 bags, 1 quart'
// units that don't exist, but they look similar enough to intelligibly join (looks at first X characters) and intelligibly guess the correct singular/plural form.
Unitz.combine( '1 loaf', '2 loaves' ); // '3 loaves'
Unitz.combine( '2, 3, 4', '1 taco' ); // '10 taco'
Unitz.combine( '2, 3 tacos, 4', '1 taco' ); // '10 tacos'
// =============================================================================
// Unitz.subtract( a, b, allowNegatives, useFractions, abbreviations, largestDenominator )
// =============================================================================
Unitz.subtract( '2 bags, 3 pints', '1 bag, 1 quart' ); // '1 bag, 1 pint'
// =============================================================================
// Unitz.conversions( input, largestDenominator, min, max );
// =============================================================================
Unitz.conversions( '1.5 quarts' ); /* Unitz.Parsed with conversions: Unitz.Conversion
conversions[0]
decimal: 288
fraction: Unitz.Fraction
friendly: 288
group: Unitz.Group
longNormal: "288 teaspoons"
longUnit: "teaspoons"
shortNormal: "288 tsp"
shortUnit: "tsp"
...
conversions[3]
decimal: 6
fraction: Unitz.Fraction
friendly: 6
group: Unitz.Group
longNormal: "6 cups"
longUnit: "cups"
shortNormal: "6 c"
shortUnit: "c"
...
conversions[6]
decimal: 0.375
fraction: Unitz.Fraction
friendly: "3/8"
group: Unitz.Group
longNormal: "3/8 gallons"
longUnit: "gallons"
shortNormal: "3/8 gal"
shortUnit: "gal"
*/
`
- ['tbsp', 'tbsps', 'tablespoon', 'tablespoons']
- ['oz', 'ounce', 'ounces', 'fl-oz', 'fl oz', 'floz', 'fluid ounce', 'fl. oz.', 'oz. fl.', 'oz fl']
- ['c', 'cup', 'cups']
- ['pt', 'pint', 'pints']
- ['qt', 'quart', 'quarts']
- ['gal', 'gallon', 'gallons']
- ['ml', 'millilitre', 'millilitres', 'milliliter', 'milliliters']
- ['l', 'litre', 'litres', 'liter', 'liters']
- ['cl', 'centilitre', 'centilitres', 'centiliter', 'centiliters']
- ['dl', 'decalitre', 'decalitres', 'decaliter', 'decaliters']
- ['kl', 'kilolitre', 'kilolitres', 'kiloliter', 'kiloliters']
- ['mm3', 'mm^3', 'cubic mm', 'cubic millimeter', 'cubic millimeters']
- ['cm3', 'cm^3', 'cubiccmm', 'cubic centimeter', 'cubic centimeters']
- ['m3', 'm^3', 'cubic m', 'cubic meter', 'cubic meters']
- ['km3', 'km^3', 'cubic km', 'meter', 'meters']
- ['in3', 'in^3', 'cubic in', 'cubic inch', 'cubic inches']
- ['ft3', 'ft^3', 'cubic ft', 'cubic foot', 'cubic feet']
- ['yd3', 'yd^3', 'cubic yd', 'cubic yard', 'cubic yards']$3
- ['mg', 'milligram', 'milligrams']
- ['g', 'gram', 'grams']
- ['kg', 'kilogram', 'kilograms', 'kilo', 'kilos']
- ['oz', 'ounce', 'ounces']
- ['lb', 'lbs', 'pound', 'pounds']
- ['ton', 'tons', 'tonnes']$3
- ['in', 'inch', 'inches', '"']
- ['ft', 'foot', 'feet', "'"]
- ['yd', 'yds', 'yard', 'yards']
- ['mi', 'mile', 'miles']
- ['league', 'leagues']
- ['mm', 'millimeter', 'millimeters']
- ['cm', 'centimeter', 'centimeters']
- ['dc', 'decimeter', 'decimeters']
- ['m', 'meter', 'meters']
- ['km', 'kilometer', 'kilometers']$3
- ['ns', 'nanosecond', 'nanoseconds', 'nano', 'nanos']
- ['us', 'microsecond', 'microseconds', 'micros', 'micro']
- ['ms', 'millisecond', 'milliseconds', 'millis']
- ['s', 'second', 'seconds', 'sec', 'secs']
- ['min', 'minute', 'minutes', 'mins']
- ['hr', 'hour', 'hours', 'hrs']
- ['day', 'days']
- ['wk', 'week', 'weeks', 'wks']
- ['yr', 'year', 'years', 'yrs']$3
- ['sqin', 'sq. in.', 'sq in', 'in2', 'in^2', 'square inch', 'square inches']
- ['sqft', 'sq. ft.', 'sq ft', 'ft2', 'ft^2', 'square foot', 'square feet']
- ['sqyd', 'sq. yd.', 'sq yd', 'yd2', 'yd^2', 'square yard', 'square yards']
- ['acre', 'acres']
- ['sqmi', 'sq. mi.', 'sq mi', 'mi2', 'mi^2', 'square mile', 'square miles']
- ['sqmm', 'sq. mm.', 'sq mm', 'mm2', 'mm^2', 'square millimeter', 'square millimeters']
- ['sqcm', 'sq. cm.', 'sq cm', 'cm2', 'cm^2', 'square centimeter', 'square centimeters']
- ['sqm', 'sq. m.', 'sq m', 'm2', 'm^2', 'square meter', 'square meters']
- ['sqkm', 'sq. km.', 'sq km', 'km2', 'km^2', 'square kilometer', 'square kilometers']$3
- ['bit', 'bits']
- ['nibble', 'nibbles']
- ['b', 'byte', 'bytes']
- ['kb', 'kilobyte', 'kilobytes']
- ['mb', 'megabyte', 'megabytes']
- ['gb', 'gigabyte', 'gigabytes']
- ['tb', 'terabyte', 'terabytes']
- ['pb', 'petabyte', 'petabytes']
- ['eb', 'exabyte', 'exabytes']
- ['kbit', 'kilobit', 'kilobits']
- ['mbit', 'megabit', 'megabits']
- ['gbit', 'gigabit', 'gigabits']
- ['tbit', 'terabit', 'terabits']
- ['pbit', 'petabit', 'petabits']
- ['ebit', 'exabit', 'exabits']$3
- ['deg', 'degs', 'degree', 'degrees']
- ['rad', 'rads', 'radian', 'radians']`