2012-10-09 44 views
1

我有这个代码和问题是其开始从$2,147,483,647给输出,其中,因为我已经设置3000000000$3,000,000,000我在我的PHP代码中丢失了什么?

,我从我们在表单中设置有想出来的,但如果我们选择高$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

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

为了解决这个问题,你可以使用一个float,它有一个更大的值范围。有几种方法可以将数字声明为浮点数,例如使用E符号或通过转换,如下所示。

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

或者只是'(浮动)' – Peon

+0

我会用浮动谢谢,并检查它是否可以工作 – deerox

+0

是的,它的工作非常感谢,非常感谢 – deerox

2

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

+0

有没有办法在这段代码中解决这个问题? – deerox

+0

在php中是否还有'longint' /'bigint'? –

+0

int = 2,147,483,647 bigint => 9,223,372,036,854,775,807 – Peon

2

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

+0

即时通讯非常新的PHP,所以如果我可以修复这个代码,只需更改代码,这将帮助我感谢。 – deerox

+0

即时检查您的帖子并找出答案。谢谢 – deerox

相关问题