嘿,伙计,我正在做一个涉及资金使用的项目。我试着不再使用舍入,因为它将事物舍入到最接近的十分之一,我需要确切的数字。我使用它的一个原因是它给出了一个整数。
我使用数字系统的方式是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);
这能解决你的问题吗?