что не так с математическим простым уравнением?

$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() округляет число на цело в меньшую сторону.

→ Ссылка