PHP:计算应用于产品的税率

时间:2015-06-24 07:37:53

标签: php rounding

由于四舍五入,我在计算应用于产品的百分比税方面遇到了严重问题。

例如:

如果您的产品价格为1.00英镑(包括20%的税),则分解为:

0.83 ex tax
0.17 tax
1.00 total

但是,如果计算出百分比增加:

round( (( ( 1 - 0.83 ) / 0.83 ) * 100), 2);

答案是20.48,因为增值税的实际价格为0.8333333333

因此,如果你计算:

round( (( ( 1 - 0.8333333333 ) /0.8333333333 ) * 100), 2);

您得到20的正确答案。

在这种情况下显然可以将20.48向下舍入到20,但这不是一个解决方案,因为某些税率是小数点后两位所以不能假设你可以围绕税率。

我是否遗漏了某些内容,或者在不知道原始税率的情况下这是不可能的?

6 个答案:

答案 0 :(得分:3)

0.17不是20%的{​​{1}},因此您的基本假设不准确(舍入为:P)。

不要四舍五入,如果没有所有的舍入计算它,如果需要则显示四舍五入。这避免了必须放松计算的精度。

一个简单的测试将证明

0.83

由于我们没有在任何地方四舍五入,我们可以将税率反向设计为点。

尝试20%

$price=0.8333333333;
$taxRate=21.25;
$tax=$price*$taxRate/100;
$total=$price+$tax;
$calculatedTaxRate=(($total-$price)/$price)*100;      // 21.25

答案 1 :(得分:1)

不会是这样的:

17%增值税

85.47无税

85.47x0.17 = 14.53

总计:100

所以100 / 1.17 = 85.47

答案 2 :(得分:0)

只要处理低精度数字,就会得到低精度的答案。如果必须显示低精度数字,则可以在视图中向用户显示它们时将它们舍入,但将它们保存为数据库中的高精度数字。

答案 3 :(得分:0)

假设您的总价为1英镑,税率为20%:

$vatDecimal = (float) 1 + (20 / 100);
$priceExclVAT = round((1.00 / $vatDecimal), 2);
$priceDisplay = number_format($priceExclVAT, 2, ',', '.');

echo $priceDisplay;

答案 4 :(得分:0)

我的肮脏版本:

$taxrate=22; // 22%
$price=100;
$priceMinusTax=($price/(($taxrate/100)+1));

答案 5 :(得分:0)

用户输入总额和税额。有时它来自数据库,我们也可以使用此代码。

$actualPrice        =   "";
$total              =   1000;//User Entry Total Amount
$gst                =   18;//User Entry GST Tax %
$calculateTax       =   100+$gst;
$calculateAmount    =   $total*100;
$actualPrice        =   $calculateAmount/$calculateTax;
echo $actualPrice       =   round($actualPrice,2);
echo $gstAmount         =   round($total-$actualPrice,2);