PHP十进制计算

问题描述:

我在读,你必须小心使用PHP中的浮点比较和计算。我不是PHP的专家,所以我想我会问社区什么是在PHP中做精确小数计算的最佳方法。PHP十进制计算

我正在开发一个计算所有本周输入时间的计时卡应用程序。超过40小时的任何事情都被视为加班。然后,我想根据进入总时间的百分比在每个时间条目上分发加班费。

实施例:

星期一=10小时
总时间=50小时
总加班=10小时

的总时间(0.2)=百分比星期一(10小时)/总时间(50小时)
加班加点地分配到周一(2小时)=总加班费(10小时)*总时间的百分比(0.2)

现在作出周一加班2小时的新条目和减去从原来的2小时条目。

新条目:
周一(8小时)=周一 - 加班分配到周一(2小时)
周一加班=2小时

事情使用整数你原来的时候似乎并不坏条目,但是当我开始使用浮动并且每天有多个时间条目时会发生什么?每次输入时都会有一部分时间分配给它,但我需要确保不要再分配更多的加班时间,然后才能使用,同时我还需要确保每天和整个计时卡的总时间与原来的一样进入。我读过比较浮动php是不安全的。我该如何计算。 (##)另外,最后输入的数字必须四舍五入至小数点后2分

阅读The Floating-Point Guide明白到底为什么你有要小心混合浮点数和“小数”的概念(这与PHP完全无关)。

它也有一个cheat-sheet for PHP

我想你会在bcmath时的lib /功能最好看:http://php.net/manual/en/book.bc.php

你可以使用定点数学。例如,如果您的值需要精确到1分,那么使用一分作为您的单位,然后您可以使用值1234来表示12.34,等等。

您仍然会发现某些操作(包括除法)可能会返回浮点值。无论如何,你只需要决定如何处理余下的事情。例如,如果你有1.04,你除以5,结果应该是0.21(四舍五入或最接近)或0.20(舍入)等等,然后用round,ceil或floor转换回整数。

+0

在OP的情况下,这相当于以整数分钟或甚至秒计算,以浮点小时计算 – 2010-07-14 14:29:23