如何在PHP中输入提示价格?
我的示例函数:
function dividePrice(float $a, float $b) : float
{
return $a / $b;
}
echo dividePrice(132.32, 23.24);
此返回:5.6936316695353
如果我使用float进行类型提示是否安全且计算正确?如果没有浮动怎么办?
答案 0 :(得分:0)
浮点数具有固有的舍入问题,因为许多十进制数不能精确地用浮点表示,而只能是close approximations。
要用PHP表示货币,我只能建议使用适当的货币库来执行精确的计算并显式处理舍入。
示例brick/money(我编写的一个库)
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,该库可以对任意大小的数字执行精确的计算。您还可以直接使用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
来代表金钱(以美分表示)(不过,除法仍然要格外小心)。但我只能鼓励您使用一个完善的库来使您的代码更具可读性,并且不易出错。