舍入到PHP中的浮点数的倍数

时间:2013-06-14 06:43:10

标签: php math rounding division

我想将数字舍入到特定数字或它们的倍数。对于整数,它是可以的,但是当我想要循环到多个浮点数时出现问题,如下例所示:

我要围绕的package的数量(或倍数):

2.6
     

当我输入1时,它应向上舍入到2.6

     

当我输入2,5时,它应向上舍入到2,6

     

当我输入3时,它应向上舍入 5,2 (2 * 2,6)

我尝试使用fmod来检查可分性,但它对我不起作用。

谢谢大家。

1 个答案:

答案 0 :(得分:3)

您可以将您的数字除以基础浮点数,将其四舍五入到最近的整数,然后重新乘以。

伪造的代码

def round_to_float(base_float,to_round)
    return ceiling(to_round / base_float) * base_float
end

3的例子:

ceiling(3.0 / 2.6) * 2.6
ceiling(1.15) * 2.6
2 * 2.6
5.2

对于多次检查,您可以使用fmod($to_round,$base_float) == 0,但不可避免地存在浮点不准确性,并且它不是测试浮点数的可靠方法。

要确定,您应该选择足够小的epsilon(按照计算机上的机器精度顺序),并确保您的商to_round/base_float在其epsilon范围内{ {1}}。

将它们放在一起

floor

其中epsilon是一个非常小的数字。理论上它应该是你的机器精度......通常类似10 ^ -9。实际上,在大多数用例中,10 ^ -4就足够了。