JavaScript matematikai számítás menetét/eredményét hogyan lehetne javítani?
Tudom, hogy JS-ben ez van és kész, a lebegőpontosság meg stb. miatt de csak van arra mód, hogy ebből a számításból:
var g = 2.1;
var v = 20;
var n = g/((100+v)/100);
... ne azt az eredményt kapjam meg, hogy 1.7500000000000002, mert jelenleg ezt az eredményt adja.
Rengeteg ilyen lesz, ha egy fent látható műveletsort hívogatunk különböző bemenettel.
Szeretném, ha ez megoldódna, és kb úgy köpné ki az eredményt mint a számológép, tehát: pl. így 1.75
Azt viszont nem akarom, hogy kerekítéssel meg toFixed-el leharapjuk a szám végét, mert ennek pontosnak kell lennie, nem lehet elnagyolni.
Van erre valami lehetőség?
alert(Math.round(n*10000000000)/10000000000);
?
Ez mindaddig pontos lesz, amíg 10 tizedesjegyen belül van az eltérés.
Hát a fenti példa helyett én biztos ezt írnám:
var n = 100*g/(100+v)
Hiszen ez ugyanaz, de kevesebb osztással, azaz pontosabb lesz. ha tudod mindig alakítsd át a kifejezést.
Utolsónak köszi, tényleg közelebb visz a pontos eredményhez, de még mindig nem oldja meg a problémát sajnos.
Nekem olyan megoldás kell amelyik pl. a:
0.2+0.1 műveletre nem azt írja ki, hogy 0.30000000000000004, hanem hogy 0.3 mert hisz ez a pontos érték, a többi nincs is ott.
Viszont a 0.25678435256712304 + 0.25678435256712304 összegre meg írja csak szépen ki a teljes eredményt, ami 0.5135687051342461. Ez így jó is, csak az első probléma szűnjön meg valahogy.
Sajnos ilyen az élet, ezzel nem tudsz mit kezdeni.
Ha tényleg pontos számításokat szeretnél javascriptben elvégezni, akkor azt javaslom hogy keress egy megfelelő
BigDecimal library-t és azt használd, az alapműveletekkel és float-tal nem fog menni.
Githubon jók szoktak lenni, esetleg nézd meg ezt:
Kösz utolsó! Közben magamtól is már idáig jutottam, hogy nincs más megoldás!
Ezt találtam és használom, és működik jól!
Tök egyszerű használni, pl.:
netto = new BigDecimal(brutto).multiply(100).divide(new BigDecimal(afa).add(100));
console.log(netto.toString());
Ajánlom mindenkinek! :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!