为什么,当我添加两个整数时,PHP会返回错误的结果(6 + 7 = 1)?

时间:2009-10-30 12:39:11

标签: php math

我有两个变量:

$qty = 7;
$_POST['qty'] = 6;

var_dump($qty, $_POST['qty']); // both vars are integers
$_SESSION['qty'] = $qty + $_POST['qty'];
echo '='.$_SESSION['qty'];

返回:

int(7) int(6) =1 

(int)$qty, (int)$_POST['qty']无法解决问题。

我做错了什么?

更新

... intval($qty) + intval($_POST['qty']);

没有帮助。

我还注意到了一个细节。问题仅在$ _SESSION ['qty']> = 10:

时出现问题
$_SESSION['qty'] = $qty + $_POST['qty']; // $qty = 3, $_POST['qty'] = 6

返回好结果($ _SESSION ['qty'] = 9)。

解决

感谢所有人的帮助。但问题更多不实际(这是一个服务器问题)。无论如何,+1全部。

5 个答案:

答案 0 :(得分:10)

您的$ _SESSION隐式初始化为字符串

$_SESSION = 'blah';

$_SESSION['qty'] = 13;
var_dump($_SESSION['qty']); // gives "1"

答案 1 :(得分:1)

确实非常奇怪,我从未遇到过这种问题。如果在算术运算中明确使用整数值? (与转换为整数不同)

$_SESSION['qty'] = (intval($qty) + intval($_POST['qty']));

您是否尝试过仅使用自己的变量,并将POST值保留在操作之外?

答案 2 :(得分:1)

您使用(int)执行的操作是转换变量,而不是转换它。您应该使用intval($var)代替。

请参阅PHP: Integers

答案 3 :(得分:1)

这给你带来了什么?

$localQty = 7;
$_POST['qty'] = 6;

$_SESSION['qty'] = ($localQty + $_POST['qty']);
var_dump($_SESSION['qty']);

您是否在脚本开头使用session_start()正确初始化会话?

答案 4 :(得分:1)

我会print_r($ _ SESSION)看看它是什么。