5

我正在编写一个小脚本来计算扣除后的税值。我的应用程序有几个提供 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%。如第一个回声语句所示。

然而,if 语句出错并显示“会计错误”。这里发生了什么?

4

3 回答 3

4

这是浮点计算的常见问题。简而言之,一些十进制数不能用二进制精确描述。

常见的解决方案是坚持使用整数并以美分计算所有内容,并且仅在输出除以 100 时。

于 2013-03-13T12:07:12.260 回答
1

查看用于比较浮点的手册:http: //php.net/manual/en/language.types.float.php

于 2013-03-13T12:12:33.990 回答
1

您可能想研究 PHP 的BCMath扩展。我通过搜索此站点并在此处找到问题找到了参考。

于 2013-03-13T12:12:46.827 回答