Сбит с толку PHP bcmul()

Почему это вывод 87.5 и не 87.50?

<?php

$quantity = 25;
switch ($quantity)
{
    case ($quantity <= 50):
        $price = 3.50;
        break;
    case ($quantity <= 100):
        $price = 3.00;
        break;
    default:
        break;

}
echo bcmul($price, $quantity, 2);
// 87.5

?>

3 ответа

Решение

Использование number_format() вместо bcmul()

echo number_format(bcmul($price, $quantity, 2), 2, '.'); // forces to output always 2 diget after .

Это округление 87,50, поскольку 87,5 будет таким же. Чтобы исправить, вам нужно:

number_format("87.50",2);

Математически 87,5 это 87,50. Если вам нужен дополнительный номер, вы можете использовать number_format или же money_format отображать лишние 0

Для php < 7.3 используйте

$val = bcmul('2', '5', 2);
$val = number_format($val, 2, '.', '');

// $val = "10.00"

или используйте php >= 7.3 он исправлен

https://www.php.net/manual/en/function.bcmul.php

Другие вопросы по тегам