PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
ümardamine javascriptis
Postitaja: blaa 2014-02-04 16:04:40
vaja ümardada 2 kohani
sounds like easy, eks
Math.round(x *100) / 100

Aga numbrid, mida ümardan on 9.075 ja -9.075
Mysql round annab 9.08, -9.08
Php annab 9.08, -9.08
Excel 9.08, -9.08
ja siis eelpool mainitud javascript 9.08, -9.08
RE: ümardamine javascriptis
Postitaja: blaa 2014-02-04 16:07:41
st javascript annab 9.07, -9.07
.toFixed ja muud häkid ei ole ka abiks.

Tahaks saada brauseris, Firefoxis, samu tulemusi, mida annab php ja mysql.
RE: ümardamine javascriptis
Postitaja: ise php 2014-02-04 17:10:48
function roundToTwo(num) {
return +(Math.round(num + "e+2") + "e-2");
}
RE: ümardamine javascriptis
Postitaja: blaa 2014-02-04 19:40:11
Proovitud juba, sellega siis tulemuseks 9.08 ja -9.07,
mis ei ole ka kuigi hea, kui ma näiteks panen müügarve peale toote, arvutan talle mingi ale, tulemus 9.075, ümardan ja müün asja maha 9.08-ga. Nüüd klient toob asja tagasi, teen arve miinus-kogusega, sama ale ja tulemus -9.07. Not good, klient saab sendi võrra vähem tagasi.
Mis ma ise juba mõtlesin, et negatiivse arvu kõigepealt korrutaks -1ga läbi, ümardaks, ja korrutaks veelkord -1ga.
Aga peab ju olema vähe loogilisem võimalus.
RE: ümardamine javascriptis
Postitaja: - 2014-02-04 19:49:18
Offtopic: käid ajaxiga serveris ümardamas
RE: ümardamine javascriptis
Postitaja: andris 2014-02-04 20:01:10
See on JavaScripti numbritüübi "tore" omadus, et murdarvud ei ole täpsed. 9.075 * 100 ei ole 907.5 vaid 907.499999999, mis on peaaegu sama kui 907.5, aga mitte päris sama.

Lahenduseks on komakohtadest täiesti lahti saamine, nii et sinu näite puhul näeks näide välja nii:

Math.round(x * 1000 / 10)/100 == 9.08
RE: ümardamine javascriptis
Postitaja: blaa 2014-02-04 20:07:01
Math.round(-9.075 * 1000 / 10)/100 == -9.07
RE: ümardamine javascriptis
Postitaja: rtfm 2014-02-04 21:26:48
https://github.com/MikeMcl/big.js
RE: ümardamine javascriptis
Postitaja: blaa 2014-02-04 22:37:22
big.js on lootustandev, tänud
RE: ümardamine javascriptis
Postitaja: andris 2014-02-05 10:05:08
TSITEERITUD:
Math.round(-9.075 * 1000 / 10)/100 == -9.07


Kusjuures tegelikult on see täiesti korrektne. Ümardamise puhul on "peidetud argumendiks" ümardamise suund, mis JavaScripti puhul on +∞ (ROUND_UP) aga PHP puhul 0 (ROUND_HALF_UP)

ECMA-262 v5.1 standardist

15.8.2.15 round (x)
If two integer Number values are equally close to x, then the result is the Number value that is closer to +∞



Seega 707.5 puhul on 708 lähemal +∞ suunale, kui 707. -707.5 puhul aga on -707 lähemal +∞ suunale, kui +708. JavaScriptis kahjuks ümardamise suunda muuta ei saa, aga php puhul on võimalik kasutada kolmandat valikulist round() funktsiooni argumenti $mode.
RE: ümardamine javascriptis
Postitaja: andris 2014-02-05 10:09:41
TSITEERITUD:
∞


See sait ei suuda (endiselt) unikoodi kuvata. ∞ on lõpmatuse sümbol oo
RE: ümardamine javascriptis
Postitaja: etkar- 2014-02-05 16:19:43
TSITEERITUD:


Kusjuures tegelikult on see täiesti korrektne. Ümardamise puhul on "peidetud argumendiks" ümardamise suund, mis JavaScripti puhul on +∞ (ROUND_UP) aga PHP puhul 0 (ROUND_HALF_UP)

ECMA-262 v5.1 standardist

15.8.2.15 round (x)
If two integer Number values are equally close to x, then the result is the Number value that is closer to +∞



Seega 707.5 puhul on 708 lähemal +∞ suunale, kui 707. -707.5 puhul aga on -707 lähemal +∞ suunale, kui +708. JavaScriptis kahjuks ümardamise suunda muuta ei saa, aga php puhul on võimalik kasutada kolmandat valikulist round() funktsiooni argumenti $mode.
siis pole muud, kui vahetult enne abs() teha

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0862851142883