PHP的ceil()和floor()函数是否返回浮点数?

5
以下是对ceil()函数的PHP文档的说明:

返回值

value向上舍入到最接近的整数。虽然浮点数的取值范围通常比整数大,但ceil()函数的返回值仍然是float类型。

floor()函数也返回一个float值,但我不明白为什么非小数的返回值需要比整数的范围更大。

1
在您引用的语句中已经说明了:“由于浮点数的值范围通常比整数大”。 如果您返回一个 int (或 long ),有可能您的原始值超出了可以通过该 int 或 long 表示的数字范围。 - klaar
“你的原始值超出了数字范围”是什么意思?我的意思是,ceil()floor() 的目的是将数字四舍五入为整数。 - Audite Marlow
1
是的,但如果您有一个大于四十亿的数字,则无法将其包含在int中,因为该数字太大而无法适合四字节整数。对于无法适合八字节整数(长整型)的数字也是如此。如果我没记错的话,double(这是一个八字节浮点数)的范围为10^-308到10^+308,远远超出了long可能值的范围。如果您想要对一个大约为10^100的粗略值进行上取整或下取整,则无法将其放入long中,因此需要使用另一个float(或double)。 - klaar
好的,我现在明白了。谢谢你的解释。这基本上回答了问题。 - Audite Marlow
@klaar 你可以将评论复制为答案,这样之后 OP 就可以将问题标记为已解决。 - thexpand
1
@thexpand 完成了。 - klaar
1个回答

5
在你引用的语句中已经说明了:由于float的值范围通常比整数大,如果你返回一个int(或long),那么你的原始值很有可能超出了可以由该int或long表示的数字范围。
后续问题和答案:
“你说的'你的原始值超出了数字范围'是什么意思?我的意思是,毕竟,ceil()和floor()的目的是将数字四舍五入为整数吗?”
是的,但是如果您有一个无符号数字高于40亿多或一个有符号数字大于其中一半,它就不能包含在int中,因为数字太大而无法适应四字节整数中。同样,对于无法适应八字节整数(长整型)内部的数字也是如此。
如果我没记错的话,double(这是一个八字节浮点数)的范围是10^-308到10^+308,比long可能的值范围要广得多。
如果您想将近似值为10^100的数字向上取整或向下取整,则无法将其放入int或long中,因此只能使用float(或double)。
(此答案在问题提出后很久进行了综合,以提供实际答案,而不是只留下几条评论)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接