Autor Zpráva
Dart21
Profil
Zdravím,
řeším problém s funkcí number_format, která pokud do ní vložím větší číslo např. 9223372036854775705 tak mi vrátí číslo 9.223.372.036.854.775.808
Zde je kód:
$number = "9223372036854775705";
echo number_format($number,0,",",".");
// return 9.223.372.036.854.775.808;

Děkuji za jakékoliv rady.
Alphard
Profil
To není chyba funkce number_format(), tak velké číslo zřejmě přesahuje velikost dostupného datového typu, musí být uloženo jako desetinné a mohou vzniknout znepřesnosti.
Dart21
Profil
V praxi to zobrazuji z databáze v datovém typu bigint. Jak to mám tedy zobrazit přesně tak jak je to uložené v databázi?
Alphard
Profil
Co je to za číslo? Co reprezentuje? Nebylo by rozumnější pracovat s ním jako s řetězcem?
Dart21
Profil
Reprezentuje peníze ve webové hře. Jelikož nejprve peníze byli v datovém typu int pak se některým hráčům podařilo dosáhnout limitu tak sem to zvýšil na bigint a dále sem se rozhodl že se už to zvyšovat nebude. Protože se zjistil hlavní zdroj příjmu, který se v následující verzi bude rušit.
Alphard
Profil
V reálu by se po takové inflaci změnila měna :-)
Ukládání peněz jako čísla je v pořádku, bohužel je to nad síly php. Jak je uvedeno v php.net/manual/en/language.types.integer.php, zřejmě máte 32bitovou verzi, která s tak velkými integery neumí zacházet.
To znamená, že buď se smíříte s přetypováním na plovoucí desetinnou čárku a určitou nepřesností (jde o zlomky procenta), nebo musíte dané číslo v PHP ukládat jako řetězec, matematické operace provádět např. pomocí BC Math a pro formátování si napsat vlastní funkci.

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: