Web s tržbou 1,5 - 2,5 milionu Kč ročně na prodej
Zobrazují se odpovědi 1 až 8 z 8

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

  1. 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

  2. Happy Robot :]

    Co se právě děje na Webtrhu?

  3. Citace Původně odeslal petrs Zobrazit příspěvek
    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).

  4. 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á"?

  5. 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...

  6. 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 :)

  7. Citace Původně odeslal petrs Zobrazit příspěvek
    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:

    PHP kód:
    Floating point numbers (AKA "floats", "doubles" or "real numbers") can be specified using any of the following syntaxes:
    <?php
    $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.

  8. Díky, pánové, za vaše rady!

  9. od té doby, co bylo vymyšleno tlačítko na přidání reputace, se děkovat nemusí :)

Hostujeme u Server powered by TELE3