Zadejte hledaný výraz...

ceny a jejich výpočet – spolehlivost typu "float"

Petr Bartoš
verified
rating uzivatele
24. 3. 2008 20:53:49
Ahoj,
že PHP typ float je nepoužitelný v podstatě pro cokoliv, kde přesnost je důležitá, je známá věc. Co v takových případech používáte vy? A je-li to např. rozšíření BC math nebo gmp, nenarazili jste někdy na problém, že by toto řešení nebylo podporováno vašim hostingem?
Petr
24. 3. 2008 20:53:49
https://webtrh.cz/diskuse/ceny-a-jejich-vypocet-spolehlivost-typu-float#reply54829
Honzaa
verified
rating uzivatele
24. 3. 2008 21:26:39
Napsal petrs;44600
Ahoj,
že PHP typ float je nepoužitelný v podstatě pro cokoliv, kde přesnost je důležitá, je známá věc. Co v takových případech používáte vy? A je-li to např. rozšíření BC math nebo gmp, nenarazili jste někdy na problém, že by toto řešení nebylo podporováno vašim hostingem?
Petr
Numerické datové typy můžou být float (pro uložení používají 4 bytes) nebo přesnější real nebo double (pro uložení používají 8 bytes).
24. 3. 2008 21:26:39
https://webtrh.cz/diskuse/ceny-a-jejich-vypocet-spolehlivost-typu-float#reply54828
milan
verified
rating uzivatele
24. 3. 2008 22:52:22
Jenže vtip je v tom, že jakékoliv číslo s pohyblivou řádovou čárkou je z principu nepřesné. Otázka je, co s tím chceš vyvádět.
Podle všeho je to špatně položená otázka, protože ani bcmath ani gmp nemají nekonečnou přesnost a pro běžné lamy programátory nenabízí oproti běžným typům nic navíc.
Takže znovu: jaký je konkrétní případ, kdy je "přesnost důležitá"?
24. 3. 2008 22:52:22
https://webtrh.cz/diskuse/ceny-a-jejich-vypocet-spolehlivost-typu-float#reply54827
Petr Bartoš
verified
rating uzivatele
25. 3. 2008 07:46:46
Honzaa: v php je nativně k dispozici pro práci s desetinnou čárkou jen typ float
milan: práce s částkama, např. porovnávání dvou čísel. Vadí mi, že 34.95 != 34.95, pro tatáž dvě čísla typu float. Chápal bych, že se při porovnávání na třeba více než desáté pozici za desetinnou čárkou systém dostává na technický limit datového typu, ale i u tak malého čísla? Nebo dělení čísla a jeho zpětné vynásobení dělitelem, nepřesnosti v typu float se občas přelívají výše než jen do setin výsledku. Nějak se na to musí dát vyzrát, a v zaokrouhlování to snad nebude...
25. 3. 2008 07:46:46
https://webtrh.cz/diskuse/ceny-a-jejich-vypocet-spolehlivost-typu-float#reply54826
milan
verified
rating uzivatele
25. 3. 2008 08:53:01
Pro finanční výpočty se NIKDY nepoužívá typ s pohyblivou řádovou čárkou.
Všechny částky počítej v haléřích (koruny * 100) a nemáš problém. Ověř si PHP_INT_MAX na své platformě, pokud jedeš na 64 bitech, tak je to 9 223 372 036 854 775 807 což by na běžný eshop mohlo stačit :)
25. 3. 2008 08:53:01
https://webtrh.cz/diskuse/ceny-a-jejich-vypocet-spolehlivost-typu-float#reply54825
Honzaa
verified
rating uzivatele
25. 3. 2008 21:28:03
Napsal petrs;44675
Honzaa: v php je nativně k dispozici pro práci s desetinnou čárkou jen typ float
V PHP manuálu lze najít třeba také toto:
The size of a float is platform-dependent, although a maximum of ~1.8e308 with a precision of roughly 14 decimal digits is a common value (that's 64 bit IEEE format).
Což znamená, že číslo s plovoucí desetinnou čárkou může být i typu real, protože 64 bitový formát znamená, že číslo typu real není nijak ořezáno.
Viz třeba toto:
Floating point numbers (AKA "floats", "doubles" or "real numbers") can be specified using any of the following syntaxes:
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
což je také z PHP manuálu. Jinak souhlasím s milanem, že pro finanční výpočty se NIKDY nepoužívá typ s pohyblivou řádovou čárkou.
25. 3. 2008 21:28:03
https://webtrh.cz/diskuse/ceny-a-jejich-vypocet-spolehlivost-typu-float#reply54824
Petr Bartoš
verified
rating uzivatele
26. 3. 2008 12:08:04
Díky, pánové, za vaše rady!
26. 3. 2008 12:08:04
https://webtrh.cz/diskuse/ceny-a-jejich-vypocet-spolehlivost-typu-float#reply54823
milan
verified
rating uzivatele
26. 3. 2008 13:14:57
od té doby, co bylo vymyšleno tlačítko na přidání reputace, se děkovat nemusí :)
26. 3. 2008 13:14:57
https://webtrh.cz/diskuse/ceny-a-jejich-vypocet-spolehlivost-typu-float#reply54822
Pro odpověď se přihlašte.
Přihlásit