Autor | Zpráva | ||
---|---|---|---|
nothrem Profil |
#1 · Zasláno: 21. 11. 2006, 14:13:34 · Upravil/a: nothrem
Ahoj, mám php program (běží na php 5.1.4), který z DB vytáhne několik hodnot, sečte je společně s hodnotami zadanými uživatelem a uloží zpět.
Narazil jsem ale na problém, že výsledek se liší podle pořadí sčítaných prvků a pak to dělá bordel v databázi: např.: To si mam nejdřív čísla seřadit podle velikosti a pak je teprve sčítat??? Nebo jak jinak se zbavit téhle chyby když nevim v jakých rozsazích se pohybuje ta chyba a v jakých skutečné hodnoty... Díky |
||
tiso Profil |
#2 · Zasláno: 21. 11. 2006, 15:15:40
Použi zaokrúhľovanie...
|
||
zivan Profil |
#3 · Zasláno: 21. 11. 2006, 15:46:30
|
||
nothrem Profil |
#4 · Zasláno: 21. 11. 2006, 15:55:30 · Upravil/a: nothrem
zivan: díky
tiso: To je právě ten problém co jsem psal, protože skutečné hodnoty mohou jít řádově do podobných hodnot jako ta chyba a nemůžu si dovolit ztratit přesnost zaokrouhlením. |
||
zivan Profil |
#5 · Zasláno: 21. 11. 2006, 16:05:32
Muzes zaokrouhlovat treba az na patem desetinnem miste.
x = Math.round(x*100000)/100000; |
||
nothrem Profil |
#6 · Zasláno: 21. 11. 2006, 16:17:58
v mém případě bych musel zaokrouhlovat asi tak na 12. místě, ale zatím jsem to vyřešil tak jak jsem psal - čísla seřadim a pak teprve sečtu; resp:
foreach ($cisla as $cislo) Zdá se, že tohle ten problém odstraňuje nebo alespoň minimalizuje. Uvidim jestli se problém objeví, až se v programu spustí skutečná data... BTW je v php něco přesnějšího než double? |
||
zivan Profil |
#7 · Zasláno: 21. 11. 2006, 16:43:09 · Upravil/a: zivan
No nevim, jestli ten cyklus nejak pomuze. Porad pracujes s realnymi cisly a projevuje se zaokrouhlovani (nejen u scitani velkych a malych cisel, ale i u ukladani vysledku do pameti).
Napada me nekolik moznosti, jak se vyhnout zaokrouhlovani (jestli je to pro tebe takovy problem): 1) uchovavat realna cisla jako retezece a vytvorit si vlastni fce na zakladni operace 2) uchovavat realna cisla jako zlomky a vytvorit si vlastni fce na zakladni operace 3) uchovavat zvlast hodnotu cele a desetinne casti a na tyto casti by slo castecne pouzivat celociselne operace |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0