MCPcopy
hub / github.com/formatjs/formatjs / GetOperands

Function GetOperands

packages/ecma402-abstract/PluralRules/GetOperands.ts:64–111  ·  view source on GitHub ↗
(s: string, exponent: number = 0)

Source from the content-addressed store, hash-verified

62 * @param exponent Compact decimal exponent (c/e operand), defaults to 0
63 */
64export function GetOperands(s: string, exponent: number = 0): OperandsRecord {
65 invariant(
66 typeof s === 'string',
67 `GetOperands should have been called with a string`
68 )
69 const n = ToNumber(s)
70 invariant(n.isFinite(), 'n should be finite')
71 let dp = s.indexOf('.')
72 let iv
73 let f: Decimal
74 let v: number
75 let fv = ''
76 if (dp === -1) {
77 iv = n
78 f = ZERO
79 v = 0
80 } else {
81 iv = s.slice(0, dp)
82 fv = s.slice(dp, s.length)
83 f = ToNumber(fv)
84 v = fv.length
85 }
86 const i = ToNumber(iv).abs()
87 let w: number
88 let t: Decimal
89 if (!f.isZero()) {
90 const ft = fv.replace(/0+$/, '')
91 w = ft.length
92 t = ToNumber(ft)
93 } else {
94 w = 0
95 t = ZERO
96 }
97 return {
98 Number: n,
99 // Keep as string if too large for JavaScript number to preserve precision
100 IntegerDigits:
101 i.lessThanOrEqualTo(Number.MAX_SAFE_INTEGER) &&
102 i.greaterThanOrEqualTo(-Number.MAX_SAFE_INTEGER)
103 ? i.toNumber()
104 : i.toString(),
105 NumberOfFractionDigits: v,
106 NumberOfFractionDigitsWithoutTrailing: w,
107 FractionDigits: f.toNumber(),
108 FractionDigitsWithoutTrailing: t.toNumber(),
109 CompactExponent: exponent,
110 }
111}

Callers 1

ResolvePluralInternalFunction · 0.85

Calls 9

ToNumberFunction · 0.85
isFiniteMethod · 0.80
absMethod · 0.80
isZeroMethod · 0.80
lessThanOrEqualToMethod · 0.80
greaterThanOrEqualToMethod · 0.80
toNumberMethod · 0.80
invariantFunction · 0.50
toStringMethod · 0.45

Tested by

no test coverage detected