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

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

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

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

echo dividePrice(132.32, 23.24);

Это возвращение: 5.6936316695353

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

0

Решение

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


Чтобы представлять деньги в 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 представлять деньги в центах (хотя вы все равно должны быть осторожны с делением). Но я могу только призвать вас использовать хорошо зарекомендовавшую себя библиотеку, чтобы сделать ваш код более читабельным и менее подверженным ошибкам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]