Как напечатать подсказку цены?

Как ввести цены подсказки в PHP?

Моя примерная функция:

function dividePrice(float $a, float $b) : float
{
    return $a / $b;
}

echo dividePrice(132.32, 23.24);

Этот результат: 5.6936316695353

Безопасно ли и хорошо ли рассчитано, если я использую float для подсказки типов? Если не float, как это сделать?

Какие цены? В некоторых валютах нет десятичных знаков или даже дробных чисел. Если только в долларах США, то цена будет плавающей, как бы вы ни смотрели на нее, и вам просто нужно принудительно округлить до строки или ограниченной десятичной длины (при хранении в db).

IncredibleHat 17.11.2018 17:04

Только доллары. В БД должно быть как десятичное, а в PHP?

hage 17.11.2018 17:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
149
1

Ответы 1

Числа с плавающей запятой имеют неотъемлемые проблемы округления, поскольку многие десятичные числа не могут быть представлены точно с плавающей запятой, и представляют собой только близкие приближения.


Для представления денег в PHP я могу только посоветовать использовать подходящую денежную библиотеку, которая выполняет точные вычисления и явно обрабатывает округление.

Пример с кирпич / деньги, библиотекой, которую я написал:

use Brick\Money\Money;
use Brick\Math\RoundingMode;

$money = Money::of('132.32', 'USD');
echo $money->dividedBy('23.24', RoundingMode::HALF_UP); // USD 5.69

Эта библиотека основана на кирпич / математика, библиотеке, которая выполняет точные вычисления для чисел любого размера. Вы также можете напрямую использовать библиотеку brick/math для передачи точных десятичных чисел в код:

use Brick\Math\BigDecimal;
use Brick\Math\RoundingMode;

$a = BigDecimal::of('132.32');
$b = BigDecimal::of('23.24');

// Dividing to 2 decimals
echo $a->dividedBy($b, 2, RoundingMode::HALF_UP); // 5.69

// Dividing to 20 decimals
echo $a->dividedBy($b, 20, RoundingMode::HALF_UP); // 5.69363166953528399312

Повторюсь, числа с плавающей запятой предназначены для выполнения вычислений приблизительный. Не используйте их для обработки денег.

Альтернативой может быть использование int для представления денег в центах (хотя с делением все равно нужно быть осторожным). Но я могу только посоветовать вам использовать хорошо зарекомендовавшую себя библиотеку, чтобы сделать ваш код более читабельным и менее подверженным ошибкам.

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