Autor Zpráva
PrAvDíK
Profil
<?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
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
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
Jak teda spočítám v PHP příklad 10,8-10.81?
_es
Profil
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
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
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
0.0000000001
nightfish
Profil
Jak teda spočítám v PHP příklad 10,8-10.81?
$a = 10.8 - 10.81;
PrAvDíK
Profil
Ty jsi ale chytry chlapec.
_es
Profil
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)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0