| Autor | Zpráva | ||
|---|---|---|---|
| Dart21 Profil |
#1 · Zasláno: 23. 7. 2013, 22:27:47
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 |
#2 · Zasláno: 23. 7. 2013, 22:34:06
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 |
#3 · Zasláno: 23. 7. 2013, 22:40:52
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 |
#4 · Zasláno: 23. 7. 2013, 22:56:23
Co je to za číslo? Co reprezentuje? Nebylo by rozumnější pracovat s ním jako s řetězcem?
|
||
| Dart21 Profil |
#5 · Zasláno: 23. 7. 2013, 23:06:53
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 |
#6 · Zasláno: 23. 7. 2013, 23:34:31
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. |
||
|
Časová prodleva: 12 let
|
|||
0