A comprehensive JavaScript library for precise rational number arithmetic using BigInt representation.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Comparison operations and utility functions for testing equality, ordering, divisibility, and rounding operations on rational numbers.
Tests if two fractions are mathematically equal.
/**
* Tests if this fraction equals another fraction
* @param num - Fraction to compare against in any supported format
* @returns true if fractions are equal, false otherwise
*/
function equals(num: FractionInput): boolean;Usage Examples:
import Fraction from "fraction.js";
// Basic equality
const f1 = new Fraction(1, 2);
const f2 = new Fraction(2, 4);
console.log(f1.equals(f2)); // true (both equal 1/2)
// Different formats
const f3 = new Fraction(3, 4);
console.log(f3.equals("0.75")); // true
console.log(f3.equals([3, 4])); // true
console.log(f3.equals({n: 6, d: 8})); // true (simplified to 3/4)
// Precision comparison
const precise = new Fraction("0.(3)");
console.log(precise.equals(1, 3)); // true (exact 1/3)
console.log(precise.equals(0.333)); // false (0.333 ≠ 1/3)Tests if this fraction is less than another fraction.
/**
* Tests if this fraction is less than another fraction
* @param num - Fraction to compare against in any supported format
* @returns true if this fraction is less than the other, false otherwise
*/
function lt(num: FractionInput): boolean;Tests if this fraction is less than or equal to another fraction.
/**
* Tests if this fraction is less than or equal to another fraction
* @param num - Fraction to compare against in any supported format
* @returns true if this fraction is less than or equal to the other, false otherwise
*/
function lte(num: FractionInput): boolean;Tests if this fraction is greater than another fraction.
/**
* Tests if this fraction is greater than another fraction
* @param num - Fraction to compare against in any supported format
* @returns true if this fraction is greater than the other, false otherwise
*/
function gt(num: FractionInput): boolean;Tests if this fraction is greater than or equal to another fraction.
/**
* Tests if this fraction is greater than or equal to another fraction
* @param num - Fraction to compare against in any supported format
* @returns true if this fraction is greater than or equal to the other, false otherwise
*/
function gte(num: FractionInput): boolean;Usage Examples:
import Fraction from "fraction.js";
// Comparison operations
const f1 = new Fraction(1, 3);
const f2 = new Fraction(1, 2);
const f3 = new Fraction(2, 6); // Same as 1/3
console.log(f1.lt(f2)); // true (1/3 < 1/2)
console.log(f2.gt(f1)); // true (1/2 > 1/3)
console.log(f1.lte(f3)); // true (1/3 <= 1/3)
console.log(f1.gte(f3)); // true (1/3 >= 1/3)
// Compare with different formats
const quarter = new Fraction(1, 4);
console.log(quarter.lt("0.5")); // true
console.log(quarter.gt([1, 8])); // true (1/4 > 1/8)
console.log(quarter.equals(0.25)); // trueCompares two fractions and returns a numeric result indicating their relationship.
/**
* Compares this fraction with another fraction
* @param num - Fraction to compare against in any supported format
* @returns -1 if this < other, 0 if this = other, 1 if this > other
*/
function compare(num: FractionInput): number;Usage Examples:
import Fraction from "fraction.js";
const f1 = new Fraction(2, 5);
const f2 = new Fraction(3, 7);
const result = f1.compare(f2);
if (result < 0) {
console.log("f1 is less than f2");
} else if (result > 0) {
console.log("f1 is greater than f2");
} else {
console.log("f1 equals f2");
}
// Useful for sorting
const fractions = [
new Fraction(3, 4),
new Fraction(1, 2),
new Fraction(7, 8)
];
fractions.sort((a, b) => a.compare(b));
// Now sorted: [1/2, 3/4, 7/8]Tests if this fraction is evenly divisible by another fraction.
/**
* Tests if this fraction is divisible by another fraction
* @param num - Divisor fraction in any supported format
* @returns true if division results in an integer, false otherwise
*/
function divisible(num: FractionInput): boolean;Usage Examples:
import Fraction from "fraction.js";
// Basic divisibility
const f1 = new Fraction(6, 8); // 3/4
const f2 = new Fraction(3, 16); // 3/16
console.log(f1.divisible(f2)); // true (3/4 ÷ 3/16 = 4)
// Not divisible
const f3 = new Fraction(1, 3);
const f4 = new Fraction(1, 7);
console.log(f3.divisible(f4)); // false (1/3 ÷ 1/7 = 7/3)
// Divisible by integer
const f5 = new Fraction(15, 4);
console.log(f5.divisible(3)); // false
console.log(f5.divisible(1, 4)); // true (15/4 ÷ 1/4 = 15)Rounds the fraction up to the next integer or specified decimal places.
/**
* Returns the ceiling of this fraction
* @param places - Number of decimal places (default: 0 for integer ceiling)
* @returns New Fraction representing the ceiling
*/
function ceil(places?: number): Fraction;Usage Examples:
import Fraction from "fraction.js";
// Integer ceiling
const f1 = new Fraction(7, 3); // 2.333...
const ceil1 = f1.ceil(); // 3
const f2 = new Fraction(-7, 3); // -2.333...
const ceil2 = f2.ceil(); // -2
// Decimal places ceiling
const f3 = new Fraction(22, 7); // 3.142857...
const ceil3 = f3.ceil(2); // 3.15 (rounded up to 2 decimal places)Rounds the fraction down to the previous integer or specified decimal places.
/**
* Returns the floor of this fraction
* @param places - Number of decimal places (default: 0 for integer floor)
* @returns New Fraction representing the floor
*/
function floor(places?: number): Fraction;Usage Examples:
import Fraction from "fraction.js";
// Integer floor
const f1 = new Fraction(7, 3); // 2.333...
const floor1 = f1.floor(); // 2
const f2 = new Fraction(-7, 3); // -2.333...
const floor2 = f2.floor(); // -3
// Decimal places floor
const f3 = new Fraction(22, 7); // 3.142857...
const floor3 = f3.floor(2); // 3.14 (rounded down to 2 decimal places)Rounds the fraction to the nearest integer or specified decimal places.
/**
* Rounds this fraction to the nearest value
* @param places - Number of decimal places (default: 0 for integer rounding)
* @returns New Fraction representing the rounded value
*/
function round(places?: number): Fraction;Usage Examples:
import Fraction from "fraction.js";
// Integer rounding
const f1 = new Fraction(7, 3); // 2.333...
const round1 = f1.round(); // 2
const f2 = new Fraction(8, 3); // 2.666...
const round2 = f2.round(); // 3
// Decimal places rounding
const f3 = new Fraction(22, 7); // 3.142857...
const round3 = f3.round(2); // 3.14 (rounded to 2 decimal places)
const round4 = f3.round(3); // 3.143 (rounded to 3 decimal places)
// Negative numbers
const f4 = new Fraction(-5, 2); // -2.5
const round5 = f4.round(); // -2 (rounds toward zero for .5)Rounds the fraction to the nearest multiple of another fraction.
/**
* Rounds this fraction to the nearest multiple of another fraction
* @param num - The fraction to round to multiples of
* @returns New Fraction representing the rounded value
*/
function roundTo(num: FractionInput): Fraction;
/**
* Rounds to the nearest multiple specified by numerator and denominator
* @param numerator - Numerator of the multiple fraction
* @param denominator - Denominator of the multiple fraction
* @returns New Fraction representing the rounded value
*/
function roundTo(numerator: number | bigint, denominator: number | bigint): Fraction;Usage Examples:
import Fraction from "fraction.js";
// Round to nearest eighth
const f1 = new Fraction("0.9");
const rounded = f1.roundTo(1, 8); // 7/8 (nearest eighth to 0.9)
// Round to nearest quarter
const f2 = new Fraction(7, 6); // 1.166...
const quarter = f2.roundTo(1, 4); // 5/4 (nearest quarter to 7/6)
// Round to nearest tenth
const f3 = new Fraction(22, 7); // 3.142857...
const tenth = f3.roundTo("0.1"); // 3.1 (nearest tenth)All comparison methods can be chained for complex logical operations:
import Fraction from "fraction.js";
const f = new Fraction(3, 8);
// Check if fraction is in range
const inRange = f.gt(1, 4) && f.lt(1, 2); // true (1/4 < 3/8 < 1/2)
// Complex comparisons
const values = [
new Fraction(1, 6),
new Fraction(1, 4),
new Fraction(1, 3),
new Fraction(1, 2)
];
// Find values between 1/5 and 2/5
const filtered = values.filter(val =>
val.gt(1, 5) && val.lt(2, 5)
);
// Result: [1/4, 1/3]All comparison operations maintain full rational precision:
import Fraction from "fraction.js";
// Exact comparisons with repeating decimals
const third = new Fraction("0.(3)"); // Exactly 1/3
const approx = new Fraction(0.333333); // Approximate
console.log(third.gt(approx)); // true (1/3 > 0.333333)
console.log(third.equals(1, 3)); // true (exact equality)
// Large number comparisons
const big1 = new Fraction("123456789012345678901234567890", "123456789012345678901234567891");
const big2 = new Fraction("123456789012345678901234567889", "123456789012345678901234567891");
console.log(big1.gt(big2)); // true (precise comparison)