Autor | Zpráva | ||
---|---|---|---|
nothrem Profil |
#1 · Zasláno: 26. 1. 2007, 10:42:00 · Upravil/a: nothrem
SELECT ------------------------------------ ---------------------------------------------------------------------- ----------------------- echo '25*37.05 = ',25*37.05; 25*37.05 = 926.25 ????????????????????????????????????????? |
||
WertriK Profil |
#2 · Zasláno: 26. 1. 2007, 10:45:50
Nějak mi uniká pointa ....
|
||
nothrem Profil |
#3 · Zasláno: 26. 1. 2007, 10:47:00
To mě taky unikalo několik hodin, všimni si předposlední řádky výsledku
|
||
DoubleThink Profil * |
#4 · Zasláno: 26. 1. 2007, 10:55:20
Známý to problém se zaokrouhlováním v php.
Převodem operace do binární soustavy totiž vznikne něco takového: 25*37.05 = 926.24999999999999999999...Změnou datového typu na řetězec se zaokrouhlí hodnota na 14míst a vznikne 926.25. Pokud ale zaokrouhluješ přímo na 1 místo, bude výsledek 926.2 |
||
nothrem Profil |
#5 · Zasláno: 26. 1. 2007, 11:00:31 · Upravil/a: nothrem
@DoubleThink: To mě by ani tak nevadilo, že to vyjde matematicky špatně, ale proč v SQL (a v php při převodu ze stringu) to tedy vyjde dobře?
Teď jsem to zkoušel v Delphi a C++ a všechno vyjde 926.2 (dokonce i při převodu ze stringu) tak proč v SQL do vyjde dobře ? |
||
nothrem Profil |
#6 · Zasláno: 26. 1. 2007, 11:26:05
A další pokus: spusťte to samé na PHP běžící pod linuxem, a zas to vyjde matematicky správně.
viz Bug #36008 incorrect round() & number_format() result |
||
nothrem Profil |
#7 · Zasláno: 26. 1. 2007, 11:37:55 · Upravil/a: nothrem
No dobře, už nejsem v ****, jen budu muset přepsat všechny funkce zaokrouhlení.
function rounds($number, $precision = null) { return round((string)$number, $precision); } |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0