由于四舍五入,我在计算应用于产品的百分比税方面遇到了严重问题。
例如:
如果您的产品价格为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
,但这不是一个解决方案,因为某些税率是小数点后两位所以不能假设你可以围绕税率。
我是否遗漏了某些内容,或者在不知道原始税率的情况下这是不可能的?
答案 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);