我正在编写一个小脚本来计算扣除后的税额。 我的应用程序有几个提供CRUD功能的PHP脚本。 我可以添加每月费用,总计费收入,然后计算公司税的欠款。
所有数据都存储在数据库中,但是在进行计算时我遇到了一个有趣的问题,我将简化下面的代码,以便可以重现:
$total = 1.0;
$tax = 0.2;
$expenses = 0.05;
echo (($total-$tax) + $expenses); // this echo's 0.85
// (1.0 - 0.2) + 0.05
if( (($total-$tax) + $expenses) == 0.85 ) {
echo "totals add up";
}
else {
echo "accounting error";
}
这个想法是所有总数都按百分比计算。 1.0是收入的100%,有关月份的费用是5%(不是真的,但为了争论,因为我的实际计算有点复杂),无论哪种方式,这似乎是最简单的我可以把我的计算结果归结为。
所以100%(收益) - 20%(公司税)+ 5%(费用索赔)应该留给我85%的总额。如第一个echo声明所示。
然而,if语句会跳起并说“会计错误”。这里发生了什么?答案 0 :(得分:4)
这是浮点计算的常见问题。简而言之,一些十进制数不能用二进制来描述。
常见的解决方案是坚持使用整数并以美分计算所有内容,并且仅在输出除以100时计算。
答案 1 :(得分:1)
答案 2 :(得分:1)