在PHP中,ceil()能否统一一个偶数分区?

时间:2016-01-09 20:51:26

标签: php rounding

我已经阅读了很多问题和评论,但是没有看到这一点,并且由于其他人可能有相同的问题,我会在这里发布。

考虑到浮点错误,是否有可能从ceil($a / $b)得到比$a / $b更高的结果,其中$a % $b的其余部分为0?

如果是这样,因为我正在使用高于0的正整数,或许我应该写my_ceil(),我先检查[/quote],如果它不是0,则加0.1到在调用内置函数之前$ a ...

3 个答案:

答案 0 :(得分:1)

如果你似乎在询问如何使用浮点数(包括正确的非绝对错误)来决定ceil结果,以下内容应该指导你:

1)http://www.php.net/manual/en/language.types.float.php

  

可以完全表示为浮点的有理数   基数10中的数字,如0.1或0.7,没有确切的数字   表示为使用的基数2中的浮点数   在内部,无论尾数的大小。因此,他们不可能   转换成内部二进制对应物而没有少量损失   精度这可能会导致令人困惑的结果:例如,   floor((0.1 + 0.7)* 10)通常会返回7而不是预期的8,   因为内部表示将是类似的   7.9999999999999991118 ....

     

所以永远不要将浮点数结果信任到最后一位数,而则不要   直接比较浮点数是否相等 [我的重点]。如果更高   精度是必要的,任意精度数学函数和gmp函数都可用。

阅读

任意精确数学函数http://uk1.php.net/manual/en/ref.bc.php

gmp http://uk1.php.net/manual/en/ref.gmp.php

2)当使用ceil($float)时,你正在关注浮点数(作为单个输入值)当 ceil只会向上舍入到最接近的整数时,无论浮动值是什么,是无关。您可能正在考虑使用round()功能。它有自己处理上述浮点不准确问题的方法。

http://php.net/manual/en/function.round.php

要回答考虑浮点错误的原始问题,是否有可能从ceil($a / $b)获得比$a / $b更高的结果,其中{% set theme = theme|merge({assets: theme.assets|merge({ libs: theme.assets.libs|merge(['otherlibrary', 'anotherlibrary']) }) }) %} 的其余部分为0 ?答案是肯定的,因为有两点:

  • 浮动在base10数字中可能非常不准确,

  • 您使用了错误的函数来获得所需的输出所需的精度。在这种使用多个浮点数的情况下,您需要一个内置精度的函数,例如gmpmaths functions

答案 1 :(得分:0)

查看github上的ceil source code,它似乎依赖于你的C库的ceil函数。

答案 2 :(得分:0)

编辑:回答问题 - 是的,它(可能)可以。

我想这与ceil()没有任何关系,而是如果有问题的除法返回浮点数或整数类型值。

根据http://php.net/manual/en/language.operators.arithmetic.php ...

  

除法运算符(" /")返回一个浮点值,除非两个操作数是整数(或转换为整数的字符串)并且数字是可分的,在这种情况下整数值将是被退回。

因此,使用至少一个浮点值可能会产生ceil()"错误",但我应该没有两个整数。