上次我为我的运动做了简单的计算器,它的效果很好。但是今天当我再次打开代码并在浏览器中运行时,会发生一些奇怪的事情。这是我的HTML代码:
<html>
<head>
<meta charset="utf-8">
<title>Calculator</title>
</head>
<body>
<form method="post" action="disp_form.php">
<p>First Value:<br/>
<input type="text" id="first" name="first">
</p>
<p>Second Value:<br/>
<input type="text" id="second" name="second">
</p>
<select method="post" name="group1">
<option name="group1" id="add" value="add"><p>+</p><br/>
<option name="group1" id="subtract" value="subtract"><p>-</p><br/>
<option name="group1" id="times" value="times"><p>x</p><br/>
<option name="group1" id="divide" value="divide"><p>/</p><br/>
</select>
<p></p>
<button type="submit" name="answer" id="answer"
value="answer">Calculate</button>
</form>
</body>
</html>
这是我的PHP代码
<?php
$first = $_POST['first'];
$second= $_POST['second'];
$operator = $_POST["group1"];
switch($operator)
{
case "add":
echo "Answer is: " .$first + $second;
break;
case "subtract":
echo "Answer is: " .$first - $second;
break;
case "times":
echo "Answer is: " .$first * $second;
break;
case "divide":
echo "Answer is: " .$first / $second;
break;
}
?>
奇怪的是,当我使用/&amp; *,输出正确(例如2 * 5,输出为“答案是:10”)。
但是当我使用+&amp; - ,输出不正确。 (例如8 + 5,输出为5,对于8-5,输出为-5)
我认为add和substract的第一个值定义为零,这就是为什么它的结果为-5和5.但是时间和除法是如何做的呢?
答案 0 :(得分:4)
乘法和除法运算符比串联运算符具有higher precedence,因此首先针对这些情况评估数学运算,然后将其合并到字符串中。
在这些情况下,代码相当于:
echo "Answer is: " .($first * $second);
echo "Answer is: " .($first / $second);
可以得到正确的答案。
加法和减法运算符具有相同的优先级,并且是左关联的,因此这些行的执行方式如下:
echo ("Answer is: " . $first) + $second;
echo ("Answer is: " . $first) - $second;
在这两种情况下,在数学运算之前,初始字符串是类型转换为整数。因为字符串不是以数字开头,所以它等同于编写
echo 0 + $second;
echo 0 - $second;
会导致$second
的正面或负面版本。
正如其他人所说,将数学运算括在括号中以确保以正确的顺序计算表达式。它还可以使您的代码更易于阅读。
答案 1 :(得分:0)
问题出在这里
echo "Answer is: " .$first + $second;
由于您添加了点,因此Answer is: " .$first
发生了第一次连接。你需要关闭括号添加,然后需要连接字符串,如下所示。
echo "Answer is: " . ($first + $second);
同样的事情也发生了减法。
答案 2 :(得分:0)
问题是它认为您正在进行字符串操作以添加到字符串输出中。最简单的是,您可以将数学运算放在括号中。 e.g:
echo "Answer is: " .($first + $second);
或者在另一行上将它们转换为另一个变量,然后输出结果变量。您也可以将它们转换为浮点数来确定:
echo "Answer is: " .(floatval($first) + floatval($second));
答案 3 :(得分:0)
你需要在括号内放置($ first + $ second)以获得预期的结果。乘法和除法运算符优先于加法和减法运算符,但在PHP中。添加字符串与添加和减法处于同一级别,这可能导致意外结果。 Source
答案 4 :(得分:0)
这是因为PHP中的加法和减法运算符将这两个值都转换为int然后添加它们,以便将你所写的语句分解为这样的echo (int) ("Answer is: " .$first) + (int) ($second)
;
要纠正这个问题,你应该首先加/减,然后如下所示连续:
echo "Answer is: " .($first + $second);