Autor Zpráva
wordik
Profil *
Dobrý den,

potřebují zaokrouhlovat matematicky podle 3. čísla za desetinnou čárkou tímto způsobem:
8,18 * 1,21 (dph) ->9,90 (v kalkulačce 9,8978 ->zaokrouhlit nahoru)
13,31 * 1,21 (dph) ->16,11 (v kalkulačce 16,1051 ->zaokrouhlit nahoru)
14,02 * 1,21 (dph) ->16,96 (v kalkulačce 16,9642 ->zaokrouhlit dolu)

mám na to funkci
function setNumberRoundFormat($number) {
    return number_format(round($number, 3), 2, ',', '');
}

ale funguje tak nějak prapodivně. 8,18 * 1,21 mi to zaokrouhlí na 9,89 (místo 9,90) a 13,31 na 16,10 (místo 16,11).
Radek9
Profil
wordik:
Jako teoretickou chybku vidím to, že v round máš druhý parametr nastaven na 3. Nicméně přímo v number_format by mělo být stejné zaokrouhlení, takže to asi nemá vliv. Funkce mi funguje správně.
Alphard
Profil
wordik:
8,18 * 1,21 mi to zaokrouhlí na 9,89
Mně správně na 9,90.

echo setNumberRoundFormat(8.18*1.21); // 9,90
Zkontrolujte vstupy.

Ten round() je tam zbytečný, jak píše Radek, spíš to ještě může rozbít (ze 4 na 3. desetinném místě udělat 5 a zaokrouhlit blbě).
wordik
Profil *
Tak nevím jestli jsme se správně pochopili nebo jestli jsem se správně vyjádřil. Ale mě teda echo (8.18 * 1.21) zobrazí 9.8978 a nikoliv 9,90.
V jednoduchosti potřebuji takovou funkci:
- zakrouhleno podle 3čísla za desetinnou čárkou
- místo des.tečky des.čárka
- vždy zobrazena 2 desetinná místa
Radek9
Profil
wordik:
echo (8.18 * 1.21) zobrazí 9.8978 a nikoliv 9,90.
Tys tam totiž vynechal tu funkci. Pro zadanou hodnotu to správně zaokrouhlí na 9,90.

function setNumberRoundFormat($number) {
  return number_format($number, 2, ',', ''); // Funkce zaokrouhlí číslo na 2 desetinná místa (podle třetího) a zformátuje ho do stringu.
}

echo setNumberRoundFormat(8.18 * 1.21); // Zobrazí 9,90

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: