PHP:计算应用于产品的百分比税
由于四舍五入,我在计算产品的百分比税时遇到了一个重大问题 例如: 如果您的产品价格为1.00英镑(含20%的税费),细分如下:PHP:计算应用于产品的百分比税,php,rounding,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.8333333 因此,如果您计算: round( (( ( 1 - 0.8333333333 ) /0.8333333333 ) * 100
0.83 ex tax
0.17 tax
1.00 total
但是,如果计算出增加的百分比:
round( (( ( 1 - 0.83 ) / 0.83 ) * 100), 2);
答案是20.48
,因为增值税的实际价格是0.8333333
因此,如果您计算:
round( (( ( 1 - 0.8333333333 ) /0.8333333333 ) * 100), 2);
您得到了20
的正确答案
在这种情况下,将20.48
四舍五入到20
显然是可行的,但这不是一个解决方案,因为有些税率是小数点后两位的,所以不能假设您可以将税率四舍五入
我是遗漏了什么,还是在不知道原始税率的情况下这是不可能的?只要你处理的是低精度的数字,你就会得到低精度的答案。如果必须显示低精度数字,则可以在视图中向用户显示时对其进行四舍五入,但在数据库中将其保存为高精度数字。只要处理低精度数字,就会得到低精度答案。如果必须显示低精度数字,可以在视图中向用户显示时对其进行四舍五入,但将其保存为数据库中的高精度数字。
0.17
不是0.83
的20%
,因此您的基本假设不准确(四舍五入:p)
不要对钱进行舍入,在不进行舍入的情况下进行计算,如果需要,则显示舍入。这避免了在计算中失去精度
一个简单的测试将证明
$price=0.8333333333;
$taxRate=21.25;
$tax=$price*$taxRate/100;
$total=$price+$tax;
$calculatedTaxRate=(($total-$price)/$price)*100; // 21.25
由于我们没有到任何地方去,我们可以逆向工程税率一直降到最低
试试20%
$price=0.8333333333;
$taxRate=20;
$tax=$price*$taxRate/100;
$total=$price+$tax;
$calculatedTaxRate=(($total-$price)/$price)*100; // 20
0.17
不是0.83
的20%
,因此您的基本假设不准确(四舍五入:p)
不要对钱进行舍入,在不进行舍入的情况下进行计算,如果需要,则显示舍入。这避免了在计算中失去精度
一个简单的测试将证明
$price=0.8333333333;
$taxRate=21.25;
$tax=$price*$taxRate/100;
$total=$price+$tax;
$calculatedTaxRate=(($total-$price)/$price)*100; // 21.25
由于我们没有到任何地方去,我们可以逆向工程税率一直降到最低
试试20%
$price=0.8333333333;
$taxRate=20;
$tax=$price*$taxRate/100;
$total=$price+$tax;
$calculatedTaxRate=(($total-$price)/$price)*100; // 20
是不是有点像: 17%增值税 85.47免税 85.47x0.17=14.53 总数:100
所以100/1.17=85.47是不是有点像: 17%增值税 85.47免税 85.47x0.17=14.53 总数:100
所以100/1.17=85.47假设您的总价为1英镑,税率为20%:
$vatDecimal = (float) 1 + (20 / 100);
$priceExclVAT = round((1.00 / $vatDecimal), 2);
$priceDisplay = number_format($priceExclVAT, 2, ',', '.');
echo $priceDisplay;
假设您的总价为1英镑,税率为20%:
$vatDecimal = (float) 1 + (20 / 100);
$priceExclVAT = round((1.00 / $vatDecimal), 2);
$priceDisplay = number_format($priceExclVAT, 2, ',', '.');
echo $priceDisplay;
我的小而肮脏的版本:
$taxrate=22; // 22%
$price=100;
$priceMinusTax=($price/(($taxrate/100)+1));
我的小而肮脏的版本:
$taxrate=22; // 22%
$price=100;
$priceMinusTax=($price/(($taxrate/100)+1));
用户输入总金额和税款。有时它来自数据库,我们也可以使用此代码
$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);
用户输入总金额和税款。有时它来自数据库,我们也可以使用此代码
$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);
这很难被认为是一个编程问题。如果你在某一点上降低了精度,你就不能神奇地恢复精度。不管怎样,英国难道没有固定的增值税税率吗?这几乎不能被视为一个规划问题。如果你在某一点上降低了精度,你就不能神奇地恢复精度。不管怎样,英国不是有固定的增值税税率吗?这是一个难题,因为大多数产品都有外部来源的增值税税前和增值税增值。我同意这是最好的解决方案!这是一个困难的问题,因为大多数产品都有外部来源的增值税(ex.vat)和增值税(inc.vat)价值。我同意这是最好的解决方案!难以置信的简单!谢谢,非常简单!谢谢