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

时间:2013-07-21 18:33:57

标签: php

嘿,我正在研究一个涉及使用金钱的项目。我试图不再使用圆形,因为它将四舍五入到最接近的十分之一,我需要精确的数字。我使用它的一个原因是因为它给出了一个整数。

我正在使用我的数字系统的方式是100 = $1, 2000 = $20, etc..我当前正在使用圆函数,因为它会为我删除小数点并给我一个整数,让我们说:{{1} }反过来会= 223

以下是我正在使用的内容:

$2.23

以下是数字:

假设我们收取$amount += round(($amount / 29) + 30); 的费用。现在我们添加税收和处理:100 and we add 125 which equal 225 (USD $2.25)。将+ 2.9% + $.302.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% + $.302.25 by 2.9%相乘后,金额将为:.30 - 这是应添加的金额,而不是0.36525

现在,应该收取的金额的实际值是$2.25 which than would be 261 = $2.61,但是当使用该轮时它会给我$2.61,这也意味着263。上面的例子是正确的简单数学。

2 个答案:

答案 0 :(得分:2)

为了避免这样的计算打嗝,只围绕最终结果。保持所有其他计算尽可能准确:

$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.

答案 1 :(得分:0)

您可以指定精度和舍入方法以保持一致(PHP round()),然后您可以处理实际值。数学技巧如乘以10的倍数只会让它在长期内更加混乱。

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

这会解决您的问题吗?