我错过了我的PHP代码吗?

时间:2012-10-09 06:21:34

标签: php

我有这些代码,问题是它开始提供$2,147,483,647的输出,因为我已将3000000000设为$3,000,000,000

我希望我们在表单中设置的内容如果我们选择更高的$2,147,483,647,则从$2,147,483,647

开始

这是现场演示:http://deewayz.in/demo/

这是我的代码。

$v         = isset($_GET['v']) ? (int) $_GET['v'] : 3000000000;

第一次给出正确的答案。但是当我们改变形式的价值时,它会给出错误的输出。

例如,请检查:http://deewayz.in/demo/index.php?v=3100000000&sv=5

提前感谢:)

解决:

$v         = isset($_GET['v']) ? (float) $_GET['v'] : 3000000000;

3 个答案:

答案 0 :(得分:3)

您遇到integer overflow的情况,因为PHP的整数的最大值是2 ^ 31-1,其值为2147483647. PHP仅通过将值限制到它们的边界边缘来处理整数溢出超出。

要解决此问题,您可以使用float,它具有更大范围的值。有几种方法可以将数字声明为浮点数,例如使用E表示法或通过强制转换,如下所示。

$v         = isset($_GET['v']) ? (float) $_GET['v'] : 3E9;

答案 1 :(得分:2)

2147483647是整数限制。将数据类型更改为bigintfloat

答案 2 :(得分:2)

2,147,483,647是32位整数可以容纳的最大值。 对于更大的数字,您可能需要使用BCMathGMP扩展程序,或尝试使用64位版本的PHP。使用float也可能是因为它可以存储更长的数字(但它们将不再那么精确)。