true-math
Version:
True Math - math library for numbers of arbitrary length
37 lines (25 loc) • 846 B
JavaScript
import {signUnsafe} from "./sign.js";
export default function normalizeNumber(num) {
if (
num === 'NaN' ||
num === 'Infinity' ||
num === '-Infinity'
) return num;
const needMinus = signUnsafe(num) === -1;
if (needMinus) num = num.slice(1);
let startZerosCount = 0;
let endZerosCount = num.length;
const dotIndex = num.indexOf('.');
const dotPosition = dotIndex === -1 ? num.length : dotIndex;
for (let digit = 0; digit < dotPosition - 1; ++digit) {
if (num[digit] === '0') ++startZerosCount;
else break;
}
for (let digit = num.length - 1; digit >= dotPosition; --digit) {
if (num[digit] === '0' || num[digit] === '.') --endZerosCount;
else break;
}
const croppedNumber = num.slice(startZerosCount, endZerosCount);
if (needMinus && croppedNumber !== '0') return '-' + croppedNumber;
return croppedNumber;
}