Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions packages/biggest/src/format-utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import { addStrings } from "./utils";

/**
* Function to remove leading zeros from the result
* @param str
* @returns
*/
export function removeLeadingZerosFromResult(str: string): string {
if (str[0] === "-") {
return "-" + removeLeadingZerosFromResult(str.slice(1));
}
let [integerPart, fractionalPart] = str.split(".");
integerPart = integerPart.replace(/^0+/, "") || "0";
if (fractionalPart !== undefined) {
return integerPart + "." + fractionalPart;
} else {
return integerPart;
}
}

/**
* Rounds the result to the specified precision
* @param result
* @param precision
* @returns
*/
export function roundResult(result: string, precision: number): string {
let [integerPart, fractionalPart] = result.split(".");
if (!fractionalPart) {
return result;
}

// Check if there are additional digits
if (fractionalPart.length <= precision) {
fractionalPart = fractionalPart.padEnd(precision + 1, "0");
}

// Get the digit to be rounded
let roundingDigit = parseInt(fractionalPart[precision]);

let fractionToRound = fractionalPart.slice(0, precision);

if (roundingDigit >= 5) {
// Combine integer and fractional parts to create a large number
let combinedNumber = integerPart + fractionToRound;

// Add 1
let incrementedNumber = addStrings(combinedNumber, "1");

// Separate into new integer and fractional parts
let combinedLength = integerPart.length + fractionToRound.length;
let incrementedLength = incrementedNumber.length;
let lengthDifference = incrementedLength - combinedLength;
let newIntegerPartLength = integerPart.length + lengthDifference;

let newIntegerPart = incrementedNumber.slice(0, newIntegerPartLength);
let newFractionalPart = incrementedNumber.slice(newIntegerPartLength);

result = newIntegerPart;
if (newFractionalPart) {
result += "." + newFractionalPart;
}
} else {
// No rounding needed
result = integerPart;
if (fractionToRound) {
result += "." + fractionToRound;
}
}

// Remove unnecessary trailing zeros in the fractional part
result = result.replace(/(\.\d*?[1-9])0+$/g, "$1");
result = result.replace(/\.0+$/, "");
result = result.replace(/\.$/, "");

return result;
}
77 changes: 2 additions & 75 deletions packages/biggest/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -389,78 +389,5 @@ export function addStrings(num1: string, num2: string): string {
return result;
}

/**
* Function to remove leading zeros from the result
* @param str
* @returns
*/
export function removeLeadingZerosFromResult(str: string): string {
if (str[0] === "-") {
return "-" + removeLeadingZerosFromResult(str.slice(1));
}
let [integerPart, fractionalPart] = str.split(".");
integerPart = integerPart.replace(/^0+/, "") || "0";
if (fractionalPart !== undefined) {
return integerPart + "." + fractionalPart;
} else {
return integerPart;
}
}

/**
* Rounds the result to the specified precision
* @param result
* @param precision
* @returns
*/
export function roundResult(result: string, precision: number): string {
let [integerPart, fractionalPart] = result.split(".");
if (!fractionalPart) {
return result;
}

// Check if there are additional digits
if (fractionalPart.length <= precision) {
fractionalPart = fractionalPart.padEnd(precision + 1, "0");
}

// Get the digit to be rounded
let roundingDigit = parseInt(fractionalPart[precision]);

let fractionToRound = fractionalPart.slice(0, precision);

if (roundingDigit >= 5) {
// Combine integer and fractional parts to create a large number
let combinedNumber = integerPart + fractionToRound;

// Add 1
let incrementedNumber = addStrings(combinedNumber, "1");

// Separate into new integer and fractional parts
let combinedLength = integerPart.length + fractionToRound.length;
let incrementedLength = incrementedNumber.length;
let lengthDifference = incrementedLength - combinedLength;
let newIntegerPartLength = integerPart.length + lengthDifference;

let newIntegerPart = incrementedNumber.slice(0, newIntegerPartLength);
let newFractionalPart = incrementedNumber.slice(newIntegerPartLength);

result = newIntegerPart;
if (newFractionalPart) {
result += "." + newFractionalPart;
}
} else {
// No rounding needed
result = integerPart;
if (fractionToRound) {
result += "." + fractionToRound;
}
}

// Remove unnecessary trailing zeros in the fractional part
result = result.replace(/(\.\d*?[1-9])0+$/g, "$1");
result = result.replace(/\.0+$/, "");
result = result.replace(/\.$/, "");

return result;
}
// Re-export formatting utilities (extracted to format-utils.ts for file-size compliance)
export { removeLeadingZerosFromResult, roundResult } from "./format-utils";
Loading