import { SameValue } from '../262'; import { ToRawPrecision } from './ToRawPrecision'; import { repeat } from '../utils'; import { ToRawFixed } from './ToRawFixed'; /** * https://tc39.es/ecma402/#sec-formatnumberstring */ export function FormatNumericToString(intlObject, x) { var isNegative = x < 0 || SameValue(x, -0); if (isNegative) { x = -x; } var result; var rourndingType = intlObject.roundingType; switch (rourndingType) { case 'significantDigits': result = ToRawPrecision(x, intlObject.minimumSignificantDigits, intlObject.maximumSignificantDigits); break; case 'fractionDigits': result = ToRawFixed(x, intlObject.minimumFractionDigits, intlObject.maximumFractionDigits); break; default: result = ToRawPrecision(x, 1, 2); if (result.integerDigitsCount > 1) { result = ToRawFixed(x, 0, 0); } break; } x = result.roundedNumber; var string = result.formattedString; var int = result.integerDigitsCount; var minInteger = intlObject.minimumIntegerDigits; if (int < minInteger) { var forwardZeros = repeat('0', minInteger - int); string = forwardZeros + string; } if (isNegative) { x = -x; } return { roundedNumber: x, formattedString: string }; }