<emu-alg><ol><li>Let <var>x</var> be ? <emu-xref aoid="ThisNumberValue" id="_ref_9917"><a href="#sec-thisnumbervalue">ThisNumberValue</a></emu-xref>(<emu-val>this</emu-val> value).</li><li>Let <var>f</var> be ? <emu-xref aoid="ToIntegerOrInfinity" id="_ref_9918"><a href="#sec-tointegerorinfinity" class="e-user-code">ToIntegerOrInfinity</a></emu-xref>(<var>fractionDigits</var>).</li><li><emu-xref href="#assert" id="_ref_9919"><a href="#assert">Assert</a></emu-xref>: If <var>fractionDigits</var> is <emu-val>undefined</emu-val>, then <var>f</var> is 0.</li><li>If <var>x</var> is not <emu-xref href="#finite" id="_ref_9920"><a href="#finite">finite</a></emu-xref>, return <emu-xref aoid="Number::toString" id="_ref_9921"><a href="#sec-numeric-types-number-tostring">Number::toString</a></emu-xref>(<var>x</var>, 10).</li><li>If <var>f</var> < 0 or <var>f</var> > 100, throw a <emu-val>RangeError</emu-val> exception.</li><li>Set <var>x</var> to <emu-xref aoid="ℝ" id="_ref_9922"><a href="#ℝ">ℝ</a></emu-xref>(<var>x</var>).</li><li>Let <var>s</var> be the empty String.</li><li>If <var>x</var> < 0, then<ol><li>Set <var>s</var> to <emu-val>"-"</emu-val>.</li><li>Set <var>x</var> to -<var>x</var>.</li></ol></li><li>If <var>x</var> = 0, then<ol><li>Let <var>m</var> be the String value consisting of <var>f</var> + 1 occurrences of the code unit 0x0030 (DIGIT ZERO).</li><li>Let <var>e</var> be 0.</li></ol></li><li>Else,<ol><li>If <var>fractionDigits</var> is not <emu-val>undefined</emu-val>, then<ol><li>Let <var>e</var> and <var>n</var> be <emu-xref href="#integer" id="_ref_9923"><a href="#integer">integers</a></emu-xref> such that 10<sup><var>f</var></sup> ≤ <var>n</var> < 10<sup><var>f</var> + 1</sup> and for which <var>n</var> × 10<sup><var>e</var> - <var>f</var></sup> - <var>x</var> is as close to zero as possible. If there are two such sets of <var>e</var> and <var>n</var>, pick the <var>e</var> and <var>n</var> for which <var>n</var> × 10<sup><var>e</var> - <var>f</var></sup> is larger.</li></ol></li><li>Else,<ol><li id="step-number-proto-toexponential-intermediate-values">Let <var>e</var>, <var>n</var>, and <var>ff</var> be <emu-xref href="#integer" id="_ref_9924"><a href="#integer">integers</a></emu-xref> such that <var>ff</var> ≥ 0, 10<sup><var>ff</var></sup> ≤ <var>n</var> < 10<sup><var>ff</var> + 1</sup>, <emu-xref aoid="𝔽" id="_ref_9925"><a href="#𝔽">𝔽</a></emu-xref>(<var>n</var> × 10<sup><var>e</var> - <var>ff</var></sup>) is <emu-xref aoid="𝔽" id="_ref_9926"><a href="#𝔽">𝔽</a></emu-xref>(<var>x</var>), and <var>ff</var> is as small as possible. Note that the decimal representation of <var>n</var> has <var>ff</var> + 1 digits, <var>n</var> is not divisible by 10, and the least significant digit of <var>n</var> is not necessarily uniquely determined by these criteria.</li><li>Set <var>f</var> to <var>ff</var>.</li></ol></li><li>Let <var>m</var> be the String value consisting of the digits of the decimal representation of <var>n</var> (in order, with no leading zeroes).</li></ol></li><li>If <var>f</var> ≠ 0, then<ol><li>Let <var>a</var> be the first code unit of <var>m</var>.</li><li>Let <var>b</var> be the other <var>f</var> code units of <var>m</var>.</li><li>Set <var>m</var> to the <emu-xref href="#string-concatenation" id="_ref_9927"><a href="#string-concatenation">string-concatenation</a></emu-xref> of <var>a</var>, <emu-val>"."</emu-val>, and <var>b</var>.</li></ol></li><li>If <var>e</var> = 0, then<ol><li>Let <var>c</var> be <emu-val>"+"</emu-val>.</li><li>Let <var>d</var> be <emu-val>"0"</emu-val>.</li></ol></li><li>Else,<ol><li>If <var>e</var> > 0, then<ol><li>Let <var>c</var> be <emu-val>"+"</emu-val>.</li></ol></li><li>Else,<ol><li><emu-xref href="#assert" id="_ref_9928"><a href="#assert">Assert</a></emu-xref>: <var>e</var> < 0.</li><li>Let <var>c</var> be <emu-val>"-"</emu-val>.</li><li>Set <var>e</var> to -<var>e</var>.</li></ol></li><li>Let <var>d</var> be the String value consisting of the digits of the decimal representation of <var>e</var> (in order, with no leading zeroes).</li></ol></li><li>Set <var>m</var> to the <emu-xref href="#string-concatenation" id="_ref_9929"><a href="#string-concatenation">string-concatenation</a></emu-xref> of <var>m</var>, <emu-val>"e"</emu-val>, <var>c</var>, and <var>d</var>.</li><li>Return the <emu-xref href="#string-concatenation" id="_ref_9930"><a href="#string-concatenation">string-concatenation</a></emu-xref> of <var>s</var> and <var>m</var>.</li></ol></emu-alg>
0 commit comments