Autor | Zpráva | ||
---|---|---|---|
PrAvDíK Profil |
#1 · Zasláno: 20. 10. 2008, 19:39:46
<?php
$a=10.8; $b=10.81; $c=$a-$b; echo $a."-".$b."=".$c; #Kalkulačka: 10.8 - 10.81 = -0.01 #PHP/Flash/C#/.NET: 10.8 - 10.81 = -0.0099999999999998 ?> |
||
nightfish Profil |
#2 · Zasláno: 20. 10. 2008, 20:01:03 · Upravil/a: nightfish
ano, to je celkem známé chování
příčinou je způsob reprezentace desetinných čísel v počítači http://cz2.php.net/float |
||
_es Profil |
#3 · Zasláno: 20. 10. 2008, 20:12:32
Ide o to, že nie každé číslo zapísané v desiatkovej sústave konečným počtom číslic
sa dá v dvojkovej sústave tiež zapísať konečným počtom číslic. Čiže čísla sú zaokrúhlené podľa presnosti dátového typu. Teda 10.8 nie je presne 10.8 ani 10.81 nie je presne 10.81. V javascripte:10.8-10.81 je -0.009999999999999787 10.8 = 1010.110011001100110011001100110011001100110011001101 10.81 = 1010.1100111101011100001010001111010111000010100011111 Prakticky sa to dá riešiť asi len zaokrúhľovaním. Tvoja kalkulačka asi pracuje v desiatkovej sústave, alebo ráta na viac miest ako zobrazuje a výsledky zaokrúhľuje. |
||
PrAvDíK Profil |
#4 · Zasláno: 20. 10. 2008, 20:21:51
Jak teda spočítám v PHP příklad 10,8-10.81?
|
||
_es Profil |
#5 · Zasláno: 20. 10. 2008, 20:37:56
PrAvDíK
„Jak teda spočítám v PHP příklad 10,8-10.81?“ Napríklad round(10.8-10.81,10) |
||
PrAvDíK Profil |
#6 · Zasláno: 20. 10. 2008, 20:42:39
Mam tu ale problém, ty hodnoty jsou dinamické a nikdy přesně nevím kolik bude desetinných míst.
Existuje další možnost řešení? |
||
_es Profil |
#7 · Zasláno: 20. 10. 2008, 21:22:43
PrAvDíK
„Mam tu ale problém, ty hodnoty jsou dinamické a nikdy přesně nevím kolik bude desetinných míst. “ Myslíš to, že máš medzi hodnotami ako 10.8 zamiešané aj hodnoty 10 000 000 000 alebo 0.0000000001? |
||
PrAvDíK Profil |
#8 · Zasláno: 21. 10. 2008, 21:31:18
0.0000000001
|
||
nightfish Profil |
#9 · Zasláno: 21. 10. 2008, 22:07:06
„Jak teda spočítám v PHP příklad 10,8-10.81?“
$a = 10.8 - 10.81; |
||
PrAvDíK Profil |
#10 · Zasláno: 21. 10. 2008, 22:17:23
Ty jsi ale chytry chlapec.
|
||
Časová prodleva: 11 dní
|
|||
_es Profil |
#11 · Zasláno: 1. 11. 2008, 18:30:48
PrAvDíK
„0.0000000001“ Záleží na tom, či stačí, aby boli na 10 miest zaokrúhlené výsledky odčítania. Ak áno, tak stačí round($x - $y, 10) |
||
Časová prodleva: 15 let
|
0