对于经验丰富的人来说,这可能是一个非常简单的问题,但它让我疯狂。
我正在编写一个需要绘制特定数量的表情符号的程序。
帐户的计算方法如下:
$cer = userinput 1 / userinput 2
$eer = userinput 3 / userinput 4
$arr = $cer-$eer
所有用户输入都是整数,但$ cer,$ eer和$ arr大多数时间都是浮点数,尽管它们可以是整数,具体取决于输入。我这里没有使用静态演员。
我想将此表示为一个10x10格式的表情符号,其中包含快乐,悲伤和差异表情符号作为选项。
我的代码:
$experiment_happy = (int)(100-($eer*100+$arr*100));
$experiment_difference = (int)($arr*100);
$experiment_sad = (int)($eer*100);
echo $experiment_difference."<br>";
echo "<table><tr>";
for ($i = 0; $i < $experiment_happy ; $i++) {
if ($i % 10 != 0){
echo "<td><img src='images/happy.gif' width='20' height='20'></td>";
}else{
echo "</tr><tr>";
echo "<td><img src='images/happy.gif' width='20' height='20'></td>";
}
}
echo "</tr><tr>";
for ($i = 0; $i < $experiment_difference ; $i++) {
if ($i % 10 != 0){
echo "<td><img src='images/difference.gif' width='20' height='20'> </td>";
}else{
echo "</tr><tr>";
echo "<td><img src='images/difference.gif' width='20' height='20'></td>";
}
}
echo "</tr><tr>";
for ($i = 0; $i < $experiment_sad ; $i++) {
if ($i % 10 != 0){
echo "<td><img src='images/sad.gif' width='20' height='20'></td>";
}
else{
echo "</tr><tr>";
echo "<td><img src='images/sad.gif' width='20' height='20'></td>";
}
}
echo"
</tr></table>
";
我遇到以下数字的问题: userinput 1:100 userinput 2:30 userinput 3:100 userinput 4:17
计算运行正常但由于某些转换错误而绘制了错误数量的表情符号。 arr计算为0.13,乘以100 - > 13 然后将其转换为整数(int)($ arr * 100),以某种方式返回12。
我哪里错了。我怀疑它与浮点比较或转换为整数有关,但我似乎无法解决这个问题。
非常感谢任何帮助和解释。
这里可以看到现场版。 http://niederrad.no-ip.org/alex_test/nnt.php。输入框从上到下表示用户输入1-4,我的问题出现在第二个smilie网格上。
答案 0 :(得分:1)
不是它= = 14。
echo (int)(0.14 * 100);
输出: -
14
始终尽可能保持数字的完全精确度,只有在将数字呈现给用户之前才进行。
你说
所有用户输入都是整数
要注意的一件事是,$ _GET和$ _POST中的任何内容都是一个字符串,显式地将其转换为您想要的类型,而不是依赖于PHP的松散类型。
答案 1 :(得分:0)
两个问题结合起来产生您所看到的结果:
因此,当计算产生的数字略小于您想要的数字时,将其转换为整数可能比您想要的数字少一个。
如果您只进行一些不会产生太多错误的简单计算,那么您可以通过使用round
函数舍入到整数来解决此问题。