/ / Presnosť zaokrúhľovania v Lodash - javaskript, zaokrúhľovanie, percento, lodash, s pohyblivou presnosťou

Lodash zaokrúhlenie presnosť - javascript, zaokrúhľovanie, percento, lodash, s pohyblivou-bod presnosť

Snažím sa použiť číslo ako percento _.round a potom vynásobením čísla číslom 100. Z nejakého dôvodu, keď vynásobím zaokrúhlené číslo, precíznosť sa zhoršuje. Tu je to, ako to vyzerá:

var num = 0.056789,
roundingPrecision = 4,
roundedNum = _.round(num, roundingPrecision),
percent = (roundedNum * 100) + "%";

console.log(roundedNum); // 0.0568
console.log(percent); // 5.680000000000001%

husle

Prečo je hodnota 0.000000000000001 pridaná k číslu po vynásobení číslom 100?

odpovede:

7 pre odpoveď č. 1

Je to spôsobené tým, že čísla sú reprezentované vnútorne ako binárne čísla s obmedzenou presnosťou.

Pozri tiež "Je matematika s pohyblivou čiarou rozbitá?"


Je matematika s plávajúcou desatinnou čiarkou zlomená?

0,1 + 0,2 == 0,3 -> false

0,1 + 0,2 -> 0,30000000000000004

Akékoľvek nápady, prečo sa to stane?

Ktorý dostal odpoveď:

dvojitý pohyblivou čiarkou matematika je taká. Vo väčšine programovacích jazykov je založená na Norma IEEE 754, JavaScript používa 64-bitové zobrazenie s pohyblivou čiarou, čo je rovnaké ako Java double, Kľúčom problému je, že čísla sú v tomto formáte reprezentované ako celé číslo, a síce dva; racionálne čísla (napr 0.1, ktorý je 1/10), ktorého menovateľ nie je mocou dvoch, nemôže byť presne zastúpený.


Ak chcete získať správny výsledok vo vašom prípade, musíte sa zaobchádzať po všetky aritmetické:

var num = 0.056789,
roundingPrecision = 4,
roundedNum = _.round(num * 100, roundingPrecision),
percent = roundedNum + "%";

console.log(percent); // 5.0569%
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>