Autor | Zpráva | ||
---|---|---|---|
wordik Profil * |
#1 · Zasláno: 21. 5. 2014, 22:27:40
Dobrý den,
chtěl bych se zeptat, zda jde nějak přetížit funkce number_format a nastavit, tak aby nezaokrouhlovala. Jelikož potřebuji následující: vypsat 290.90909090909090909090909090909 jako 290,90 (2 desetinná místa za čárkou jsou důležitá, takže nechci, aby to vracelo pouze 290,9) na to používám funkci number_format($number, 2, ',', ''); ovšem ta mi vrátí 290,91 místo 290,90 |
||
Alphard Profil |
Nevyhovovalo by třeba zaokrouhlit (round) na 1 desetinné místo a pak formátovat na dvě?
Jestli jde prostě o první dva znaky za desetinnou čárkou, zpracujte to jako řetězec. |
||
juriad Profil |
#3 · Zasláno: 21. 5. 2014, 22:38:10
Můžeš to číslo vynásobit stem, zaokrouhlit dolu a pak zase stem vydělit:
$number = 290.90909090909090909090909090909; $decimals = 2; $number = floor($number * pow(10, $decimals)) / pow(10, $decimals); echo number_format($number, $decimals, ',', ''); |
||
wordik Profil * |
#4 · Zasláno: 21. 5. 2014, 23:06:40
Alphard:
Nejsem si jistý, jestli jsem vás dobře pochopil, ale zaokrouhlovat právě nechci vůbec, chci jen číslo zformátovat na 2 desetinná místa s desetinnou čárkou. juriad: Bohožel na číslo 290.90909090909090909090909090909 to projde v pořádku, ale třeba číslo 145.45 to zformátuje na 145,44 a mělo by to zformátovat na 145,45. Já vím, možná toho chci moc, ale sám už z toho mám zamotanou hlavu. |
||
Alphard Profil |
wordik:
„ale třeba číslo 145.45 to zformátuje na 145,44“ Hmm, on asi float ze 145.45 v binárce bude 145.44999999999999 nebo nějaký podobný problém. Řešte to přes ty řetězce, jak jsem navrhoval. echo preg_replace('/(\.\d\d).*/', '$1', 128.20512820513) Navíc je třeba ošetřit, když je vstup nedesetinné číslo. Alternativně stackoverflow.com/a/19124167/2375157. Ještě mě napadlo verzi [#3] juriad upravit přičtením nějaké malé konstanty na 3. desetinném místě a dále. Zas to ale změní hodnotu, když byste pracoval s číslem typu .9999999999. |
||
wordik Profil * |
#6 · Zasláno: 22. 5. 2014, 23:45:50
Děkuji moc, nakonec jsem to vyřešil pomocí funkce z vlákna, na který jste mě odkázal.
function truncate_decimal($number, $truncate_decimal_length = 2, $decimal_character = '.', $thousands_character = '') { $number = explode($decimal_character, $number); $number[1] = substr($number[1], 0, $truncate_decimal_length); $number_truncated = implode($decimal_character, $number); return number_format($number_truncated, $truncate_decimal_length, $decimal_character, $thousands_character); } |
||
Časová prodleva: 11 let
|
0