UNPKG

@formatjs/intl-pluralrules

Version:
45 lines (44 loc) 957 B
import { invariant, ToNumber, ZERO } from "@formatjs/ecma402-abstract"; /** * http://ecma-international.org/ecma-402/7.0/index.html#sec-getoperands * @param s */ export function GetOperands(s) { invariant(typeof s === "string", `GetOperands should have been called with a string`); const n = ToNumber(s); invariant(n.isFinite(), "n should be finite"); let dp = s.indexOf("."); let iv; let f; let v; let fv = ""; if (dp === -1) { iv = n; f = ZERO; v = 0; } else { iv = s.slice(0, dp); fv = s.slice(dp, s.length); f = ToNumber(fv); v = fv.length; } const i = ToNumber(iv).abs(); let w; let t; if (!f.isZero()) { const ft = fv.replace(/0+$/, ""); w = ft.length; t = ToNumber(ft); } else { w = 0; t = ZERO; } return { Number: n, IntegerDigits: i.toNumber(), NumberOfFractionDigits: v, NumberOfFractionDigitsWithoutTrailing: w, FractionDigits: f.toNumber(), FractionDigitsWithoutTrailing: t.toNumber() }; }