ProÄ 6.35.toFixed(1) == 6.3?
Podle dokumentace Math.round a toFixed zaokrouhlujà obÄ na nejbližšà ÄÃslo: 0..4 se zaokrouhluje dolů, zatÃmco 5..9 nahoru.
NapÅÃklad:
alert( 1.35.toFixed(1) ); // 1.4
ProÄ se v podobném nÞe uvedeném pÅÃkladu 6.35 zaokrouhlà na 6.3 a ne na 6.4?
alert( 6.35.toFixed(1) ); // 6.3
Jak zaokrouhlit 6.35 správnÄ?
InternÄ je desetinné ÄÃslo 6.35 nekoneÄné binárnà ÄÃslo. Jako vždy v takových pÅÃpadech je uloženo se ztrátou pÅesnosti.
PodÃvejme se:
alert( 6.35.toFixed(20) ); // 6.34999999999999964473
Ztrátou pÅesnosti se ÄÃslo může zvýšit i snÞit. V tomto konkrétnÃm pÅÃpadÄ se ÄÃslo o nÄco málo snÞÃ, proto bude zaokrouhleno dolů.
A co 1.35?
alert( 1.35.toFixed(20) ); // 1.35000000000000008882
Zde ztráta pÅesnosti ÄÃslo troÅ¡iÄku zvýšila, takže se zaokrouhlilo nahoru.
Jak můžeme problém s 6.35 vyÅeÅ¡it, chceme-li, aby se zaokrouhlilo správnÄ?
MÄli bychom je pÅed zaokrouhlenÃm pÅiblÞit k celému ÄÃslu:
alert( (6.35 * 10).toFixed(20) ); // 63.50000000000000000000
VÅ¡imnÄte si, že 63.5 nemá vůbec žádnou ztrátu pÅesnosti. Je to proto, že desetinná Äást 0.5 je ve skuteÄnosti 1/2. Zlomky s mocninou 2 ve jmenovateli jsou v binárnà soustavÄ reprezentovány pÅesnÄ, takže je nynà můžeme zaokrouhlit:
alert( Math.round(6.35 * 10) / 10 ); // 6.35 -> 63.5 -> 64(zaokrouhleno) -> 6.4