У меня есть скрытое поле со значением. Поскольку это скрытое поле, моим значением является строка. В моей базе данных значение хранится в виде десятичного поля с точностью до 2 точек.

Просмотр

<tr class="grand-total">
   <th>Total incl. 21% BTW:</th>
   <?php $total = number_format($cartTotal, 2, ',', '') ?>
    <td><strong class="grey-color">&euro;{{$total}}</strong></td>
 </tr>

 <input type="hidden" name="total" value={{$total}}>

Контроллер

Когда моя сумма, например, составляет 10,95 евро, я получаю 10,00 евро.

Вещи, которые я пробовал:

(float)$request->total

floatval($request->total)

floatval($request->total * 1.00)

Но все они возвращают 10 евро.

2
Christophvh 28 Апр 2016 в 10:19

2 ответа

Лучший ответ

Вы должны указать число с плавающей запятой, в котором для отделения целого числа от десятичного числа используется точка , а не запятая, поэтому вы должны ввести 10.95 вместо 10,95.

Очевидно, вы можете использовать str_replace, если все еще хотите использовать запятые:

$myNumber = floatval(str_replace(',', '.', $myNumber));
2
Aurel 28 Апр 2016 в 07:31

Хотя это не дает прямого ответа на вопрос, это действительно решит его в более долгосрочной перспективе.

Рассмотрите возможность хранения денежных сумм без десятичной дроби, чтобы $10.00 фактически сохранялся как 1000 в вашей базе данных.

Вы также можете использовать встроенные функции PHP, такие как денежный формат как долго с установкой вашей местной валюты, чтобы по-настоящему решить эту проблему.

Каковы недостатки хранения денежных ценностей в виде центов / второстепенных единиц?

3
Community 23 Май 2017 в 10:28