防止PHP舍入小数字

时间:2016-08-11 11:34:25

标签: php precision floating-accuracy

php可以处理非常小的数字而不会舍入它们吗?例如,在计算exp(-99) + 1/2时,php将其计算为0.5。这是有问题的,如果以后我想要乘以给定的结果,而不是一个非常小的数字,它只是给出一半的数字。

echo exp(-99) + 1/2 // Outputs 0.5

1 个答案:

答案 0 :(得分:0)

您不在浮点数支持的范围内。

在我的平台上(PHP浮动为64位)echo exp(-99);当前返回1.0112214926104E-43

那是因为指数部分很宽,需要代表e^-99

但是当我添加... echo exp(-99)+0.5;时,我得到0.5

您期望的结果是超过50位十进制数。

双浮点数没有这么大的尾数(通常限制在18-20位左右)。

要回答你的问题,如果你真的需要做这样的数学运算(处理非常小的数字而不对它们进行舍入)你可以使用 PHP的任意精度数学扩展

http://php.net/manual/en/book.bc.php