@lvlte/modf
Version:
Get the integral and fractional parts of a given number.
35 lines (34 loc) • 766 B
JavaScript
export function modf(x, literal = false) {
if (!Number.isFinite(x)) {
return [NaN, NaN];
}
const sign = Math.sign(x);
const ipart = Math.trunc(x);
let fpart;
if (ipart === x) {
fpart = sign * 0;
}
else if (ipart === 0) {
fpart = x;
}
else if (literal) {
const decimals = x.toString().split('.')[1];
fpart = sign * Number(`0.${decimals}`);
}
else {
fpart = x - ipart;
}
return [ipart, fpart];
}
export const ipart = (x) => {
if (Number.isFinite(x)) {
return Math.trunc(x);
}
return NaN;
};
export const fpart = (x, literal = false) => {
if (literal) {
return modf(x, true)[1];
}
return Number.isFinite(x) ? x % 1 : NaN;
};