Kezdőoldal » Számítástechnika » Programozás » JavaScript matematikai számítá...

JavaScript matematikai számítás menetét/eredményét hogyan lehetne javítani?

Figyelt kérdés

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?



2012. nov. 6. 17:36
 1/6 anonim ***** válasza:

alert(Math.round(n*10000000000)/10000000000);

?

Ez mindaddig pontos lesz, amíg 10 tizedesjegyen belül van az eltérés.

2012. nov. 6. 19:15
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
Na igen, ilyen megoldásom nekem is van, sajnos ennél jobbat én sem találtam. Azért köszönöm!
2012. nov. 6. 20:39
 3/6 anonim ***** válasza:

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.

2012. nov. 7. 08:32
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:

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.

2012. nov. 7. 11:48
 5/6 anonim ***** válasza:

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:

[link]

2012. nov. 7. 14:12
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:

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!


[link]


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! :)

2012. nov. 7. 15:18

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!