bcmul

bcmul($num1, $num2, $scale)

Mnoży dwie liczby. Przyjmuje i zwraca je jako ciągi znaków i liczy dokładnie w systemie dziesiętnym. Należy do rozszerzenia BCMath.

Parametry

  • $num1, $num2 – mnożone liczby jako ciągi znaków.
  • $scale – opcjonalny, liczba miejsc po przecinku w wyniku. Domyślnie wartość z bcscale(), zwykle 0.

Przykłady

echo bcmul("19.90", "3", 2); // 59.70
// cena z 23 % VAT
echo bcmul("1000", "1.23", 2); // 1230.00
// dokładny wynik ma więcej miejsc, niż żądasz
echo bcmul("1.25", "1.23", 4); // 1.5375
// nadmiarowe miejsca po przecinku są obcinane: 0.475 daje 0.47
echo bcmul("2.5", "0.19", 2); // 0.47
// round z liczbą dziesiętną zaokrągla w górę
echo round(2.5 * 0.19, 2); // 0.48
// zaokrąglanie w BCMath: licz z jednym miejscem więcej i dodaj połowę ostatniego miejsca
echo bcadd(bcmul("2.5", "0.19", 3), "0.005", 2); // 0.48
// duże liczby dokładnie
echo bcmul("123456789012345678", "1000"); // 123456789012345678000

Na co uważać

  • Miejsca po przecinku ponad podaną liczbę są obcinane, a nie zaokrąglane. Przy cenach daje to różnice w groszach. Dodawanie połowy ostatniego miejsca jak w przykładzie działa tylko dla liczb dodatnich.
  • Od PHP 7.3 zwraca wynik zawsze z podaną liczbą miejsc po przecinku, nawet jeśli są to zera (1230.00).
  • Parametry przekazuj jako ciągi znaków, także wynik jest ciągiem znaków.
  • Ciąg znaków, który nie jest liczbą, oznacza w PHP 7.4 ostrzeżenie i liczy się jako 0, od PHP 8.0 rzuca wyjątek ValueError.
  • BCMath to rozszerzenie PHP i nie musi być włączone na serwerze. Sprawdzisz to przez function_exists("bcadd").

Powiązane funkcje:
bcdiv()
bcadd()
bcpow()
bccomp()