что не так с математическим простым уравнением?
$this->currency = '28' //строка я так понимаю так как выбирается из select
$price = '9.35'; тоже скорей всего строка так как без (float) писало ошибки про numeric
$this->markup = '100' //строка я так понимаю так как выбирается из select
//уравнение
$total_price = ($this->currency * (float)$price) + ($this->currency * (float)$price) * $this->markup / 100;
return (int)$total_price; //на выходе хотел получить целое число
вывело 504
а если посчитать на калькуляторе:
(28 * 9,35 )+ (28 * 9,35 )* 100/100 = 523,6 ну если округлить по int получитя же 523 а не 504
Ответы (2 шт):
Автор решения: Sergei Kirjanov
→ Ссылка
Можно попробовать сменить локаль:
setlocale( LC_NUMERIC, 'en_GB' );
Если расчет нужен точный испольчуйте BCMath: https://www.php.net/manual/ru/book.bc.php
Автор решения: Gelloiss
→ Ссылка
<?php
$currency = '28';
$price = '9,35';
$markup = '100';
$price = str_replace(',', '.', $price);
$total_price = ($currency * (float)$price) + ($currency * (float)$price) * $markup / 100;
echo floor($total_price);
Проблема в том, что в price стоит запятая. Когда делаешь float() она просто отбрасывается и price = 9. Надо ее изменить на точку, делаем это с помощью str_replace.
В конце floor() округляет число на цело в меньшую сторону.