JS numbers are specified to be in terms of IEEE-754 doubles, so tenths, hundredths, and so on cannot be precisely represented. [1] So there is no way to increase precision here beyond the above that Tab showed, assuming each of those operations are accurate to the bit.<br><br>[1]: <a href="https://www.exploringbinary.com/why-0-point-1-does-not-exist-in-floating-point/">https://www.exploringbinary.com/why-0-point-1-does-not-exist-in-floating-point/</a><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Mar 10, 2019 at 13:26 guest271314 <<a href="mailto:guest271314@gmail.com">guest271314@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">So this would help with precision?</blockquote><div><br></div><div>To an appreciable degree, yes, without the scope of JavaScript floating-point number implementation. </div><div><br></div><div>The gist of the proposal is to formalize, standardize, or whatever term specification writers want to use, the *naming* of each method or operation which can get and set each discrete digit of a number - without using String methods. </div><div><br></div><div>For input </div><div><br></div><div>    1234.567</div><div><br></div><div>Each digit has a formal name which developers can get and set, whether in an array, object or number format. </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Mar 10, 2019 at 5:17 PM Michael Theriot <<a href="mailto:michael.lee.theriot@gmail.com" target="_blank">michael.lee.theriot@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>So this would help with precision?<br></div><br>On Sunday, March 10, 2019, guest271314 <<a href="mailto:guest271314@gmail.com" target="_blank">guest271314@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">(If you really wanted this as an integer, it's not well-founded; .567<br>isn't exactly representable as a double, so JS doesn't know that you<br>"meant" it to have only three digits after the decimal point, and thus<br>want 567 as the answer. You'll instead get some very very large<br>integer that *starts with* 567, followed by a bunch of zeros, followed<br>by some randomish digits at the end.)</blockquote><div><br></div><div>The code at the first post solves that problem. </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">But the question is still "what would someone use this information for?"</blockquote><div><br></div><div>That question has been answered several times in the posts above. This users' motivation was and is the ability to manipulate JavaScript floating-point numbers  (which could be considered "broken", as you described above) in order to solve mathematical problems (in this case, directly calculating the <i>n</i>th lexicographic permutation) with the number or decimal being represented as an array, without having to be concerned with not getting the same value when the array is converted back to a number. </div><div><br></div>Felipe Nascimento de Moura mentioned several other applications. <div><br></div><div>The work has already been done. This proposal is essentially to standardize the naming conventions. Whether a Number method is used </div><div><br></div><div>    i.getTensMethod</div><div><br></div><div>or an array is used</div><div><br></div><div>   arr["integer"] // 1234</div><div><br></div><div>or an object where values are arrays is used</div><div><br></div><div>    o["fraction"] // .567<br><div> </div><div>Having mentioned Intl.NumberFormat earlier in the thread, if the issue devoting resources to a <i>new </i>proposal, Intl.NumberFormate can be extended; e.g. a rough draft in code</div></div><div><br></div><div><div>    function formatNumberParts(args) {</div><div>      return Object.assign({sign:0, fraction:[0], integer:[0]}, ...args.filter(({type}) => type === "integer" || type === "fraction" || type === "minusSign").map(({type, value}) => ({[type === "minusSign" ? "sign" : type]: type !== "minusSign" ? [...value].map(Number) : -1})));</div><div>    }</div><div><br></div><div>    let number = -123;</div><div><br></div><div>    let formatter = new Intl.NumberFormat('en-US');</div><div><br></div><div>    let res = formatter.formatToParts(number);</div><div><br></div><div>    formatNumberParts(res);</div></div><div><br></div><div>If the concern is that the proposal would not be useful, consider what you would <i>name</i> various uses of Math.trunc and remainder operator used at your message?</div><div>    </div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Mar 10, 2019 at 3:58 PM Tab Atkins Jr. <<a href="mailto:jackalmage@gmail.com" target="_blank">jackalmage@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Sat, Mar 9, 2019 at 11:10 AM Felipe Nascimento de Moura<br>
<<a href="mailto:felipenmoura@gmail.com" target="_blank">felipenmoura@gmail.com</a>> wrote:<br>
><br>
> Personally, I don't think it would be THAT useful...<br>
> but...I think there is something behind this proposal that makes sense.<br>
><br>
> I do believe it could be useful for developers to have an easier access to number parts or characteristics.<br>
> Perhaps something like:<br>
><br>
> const i = 1234.567;<br>
<br>
Can you provide a scenario in which these would do something useful,<br>
such that it would be worth adding them over just using the math<br>
operations that already exist?<br>
<br>
> console.log( i.float ); // 567<br>
<br>
i % 1<br>
<br>
(If you really wanted this as an integer, it's not well-founded; .567<br>
isn't exactly representable as a double, so JS doesn't know that you<br>
"meant" it to have only three digits after the decimal point, and thus<br>
want 567 as the answer. You'll instead get some very very large<br>
integer that *starts with* 567, followed by a bunch of zeros, followed<br>
by some randomish digits at the end.)<br>
<br>
> console.log( i.abs ); // 1234<br>
<br>
Math.trunc(i)<br>
<br>
> console.log( i.thousands ); // 1<br>
<br>
Math.trunc(i / 1000)<br>
<br>
> console.log( i.million ); // 0<br>
<br>
Math.trunc(i / 1e6)<br>
<br>
> console.log( i.hundred ); // 2<br>
<br>
Math.trunc(i / 100) % 10<br>
<br>
> console.log( i.hundreds ); // 12<br>
<br>
Math.trunc(i / 100)<br>
<br>
> console.log( i.ten ); // 2<br>
<br>
Math.trunc(i / 10) % 10<br>
<br>
> console.log( i.tens ); // 123<br>
<br>
Math.trunc(i / 10)<br>
<br>
> console.log( i.tenth ); // 5<br>
<br>
Math.trunc(i % 1 * 10) % 10<br>
<br>
> console.log( i.tenths ); // 5<br>
<br>
Math.trunc(i % 1 * 10)<br>
<br>
> console.log( i.hundredth ); // 6<br>
<br>
Math.trunc(i % 1 * 100) % 10<br>
<br>
> console.log( i.hundredths ); // 56<br>
<br>
Math.trunc(i % 1 * 100)<br>
<br>
<br>
Some of these are easy to remember and use; others take some thinking<br>
to deploy. But the question is still "what would someone use this<br>
information for?", such that the benefit to developers is worth the<br>
cost to all parties involved (spec writers, implementors, testers, and<br>
then developers having to navigate a larger stdlib).<br>
<br>
~TJ<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
</blockquote>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>