使用round()获取精确值-PHP


Using round() to get exact value - PHP

嘿,伙计,我正在做一个涉及资金使用的项目。我试着不再使用舍入,因为它将事物舍入到最接近的十分之一,我需要确切的数字。我使用它的一个原因是它给出了一个整数。

我使用数字系统的方式是100 = $1, 2000 = $20, etc..,我目前使用的是四舍五入函数,因为它会去掉小数点,给我一个整数,比如说:223,它反过来会=$2.23

以下是我正在使用的:

$amount += round(($amount / 29) + 30);

以下是数字:

假设我们有电荷100 and we add 125 which equal 225 (USD $2.25)。现在我们添加税收和处理:+ 2.9% + $.30。在乘以2.25 by 2.9%.30之后,数量将是:0.36525-这是应该添加到$2.25 which than would be 261 = $2.61 的数量

问题是因为四舍五入,当我查看条纹面板(I am using Stripe API for payments)时,我看到$2.63的电荷。所以我的问题是,我该如何在没有任何四舍五入和小数点的情况下使其精确。

更新:

下面是上面的例子,更多的解释:

假设我们有电荷100 and we add 125 which equal 225 (USD $2.25)。现在我们添加税收和处理:+ 2.9% + $.30。在乘以2.25 by 2.9%.30之后,数量将是:0.36525-这是应该添加到$2.25 which than would be 261 = $2.61 的数量

因此,现在应该收取的实际金额是$2.61,但当使用舍入时,它给了我263,也就是$2.63。上面的例子是正确的简单数学。

为了避免类似的计算问题,只对最终结果进行四舍五入。保持所有其他计算尽可能准确:

$original = 100;
$original += 125;
$tax = $original * 2.9 / 100; //+2.9%
$tax += 30; //+$.30
$original += $tax; //Add tax.
echo $original; //Result is 261.525. Round as you please.

您可以指定精度和舍入方法以保持一致(PHP round()),然后可以处理实际值。从长远来看,做10的倍数乘法之类的数学把戏只会让它更令人困惑。

$amount += round(($amount / 29) + 30, 2, PHP_ROUND_HALF_UP);

这能解决你的问题吗?