为什么我的代码里case为false的选项无法输出?

为什么我的代码里case为false的选项无法输出?

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>DDDoument</title>
  </head>
  <body>
    <h1>差分机(雾)</h1>
    <form action="#" method="post">
      数值1:<input type="text" name="num1" value="">
      <select class="" name="op">
        <option value="+">+</option>
        <option value="-">-</option>
        <option value="*">*</option>
        <option value="/">/</option>
        <option value="%">%</option>
      </select>
      数值2:<input type="text" name="num2" value="">
      <input type="submit" name="act" value="提交">
    </form>
    <?php
    error_reporting(E_ALL^E_NOTICE);
    $act=$_POST['act'];
    if ($act) {
      $num1=$_POST['num1'];
      $num2=$_POST['num2'];
      $op=$_POST['op'];
      $is_number=is_numeric($num1)&&is_numeric($num2);
      var_dump($is_number);
      echo "<br/>";
      switch($is_number) {
        case 'ture':
        switch ($op) {
          case '+':
            $res=$num1+$num2;
            break;
          case '-':
            $res=$num1-$num2;
            break;
          case '*':
            $res=$num1*$num2;
            break;
          //除法计算
          case '/':
          switch ($num2) {
            case '0':
              exit('非法操作数');
              break;
            default:
              settype($num1,'double');
              settype($num2,'double');
              settype($res,'double');
              $res=$num1/$num2;
              break;
          }
          case '%':
            $res=$num1%$num2;
            break;
          default:
            echo "非法操作";
            break;
        }
        echo "显而易见:<br/>","{$num1}{$op}{$num2}={$res}";
        break;
        //当输入的字符不是数值型时
        case 'false':
          echo "非法操作数";
          break;
      }
    }
     ?>
  </body>
</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕查理 2018-10-15 18:08:14

您好,缺少break,所以程序每次都是执行完取余操作返回的值,所以不能出现小数。祝学习愉快!

case '/':
  if($num2==0){
    exit('非法操作数');
  }
  else{
    $res=(double)$num1/$num2;
  }
  break;


  • 提问者 ggplot2 #1
    哇,又粗心大意了_(:з」∠)_
    2018-10-15 18:13:25
  • 提问者 ggplot2 #2
    补加了break,现在可以输出小数了。谢谢。
    2018-10-15 18:15:17
提问者 ggplot2 2018-10-15 17:46:51
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>DDDoument</title>
  </head>
  <body>
    <h1>差分机(雾)</h1>
    <form action="#" method="post">
      数值1:<input type="text" name="num1" value="">
      <select class="" name="op">
        <option value="+">+</option>
        <option value="-">-</option>
        <option value="*">*</option>
        <option value="/">/</option>
        <option value="%">%</option>
      </select>
      数值2:<input type="text" name="num2" value="">
      <input type="submit" name="act" value="提交">
    </form>
    <?php
    error_reporting(E_ALL^E_NOTICE);
    $act=$_POST['act'];
    if ($act) {
      $num1=$_POST['num1'];
      $num2=$_POST['num2'];
      $op=$_POST['op'];
      if(is_numeric($num1)&&is_numeric($num2)) {
        switch ($op) {
          case '+':
            $res=$num1+$num2;
            break;
          case '-':
            $res=$num1-$num2;
            break;
          case '*':
            $res=$num1*$num2;
            break;
          case '/':
          // switch ($num2) {
          //   case '0':
          //     exit('非法操作数');
          //     break;
          //   default:
          //     $res=doubleval($num1)/$num2;
          //     break;
          //
          // }
          if($num2==0){
            exit('非法操作数');
          }
          else{
            $res=(double)$num1/$num2;
          }
          case '%':
            $res=$num1%$num2;
            break;
          default:
            echo "非法操作";
            break;
        }
        echo "显而易见:<br/>","{$num1}{$op}{$num2}={$res}";
        //当输入的字符不是数值型时
      }
      else {
        echo "非法操作数";
      }
    }
     ?>
  </body>
</html>

改了一下之后除法运算依然无法输出小数

好帮手慕查理 2018-10-15 10:21:11

您好,case true,case false这段逻辑并不建议这样去写,建议使用if判断完成。除法中的switch结构也建议使用if判断。题目虽然是要求使用switch...case结构,但并非是全部使用switch...case结构,要根据具体的情况来使用。转换数据为浮点数:$res=(double)$num1/$num2;即可。祝学习愉快!

  • 提问者 ggplot2 #1
    我知道不建议这么写啊,就是想试试看有没有用嘛_(:з」∠)_... 也就是说不行?
    2018-10-15 11:18:35
  • 提问者 ggplot2 #2
    改为$res=(double)$num1/$num2之后1/2还是等于1,并不是我所期望的0.5。看来数据类型转换没奏效?
    2018-10-15 11:23:53
  • 好帮手慕查理 回复 提问者 ggplot2 #3
    您好,不是不行,而是不建议。测试$res=(double)$num1/$num2;是可以输出0.5,同学可以测试一下echo (double)1/2;是否是输出的0.5,如果可以请查看代码是否存在问题?祝学习愉快!
    2018-10-15 13:41:38
提问者 ggplot2 2018-10-14 12:21:41

而且除法计算的结果为什么没办法转化为浮点数(比如1/2还是等于1)?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
PHP小白零基础入门
  • 参与学习           人
  • 提交作业       626    份
  • 解答问题       4930    个

想要学好Web后端开发的中流砥柱语言,本阶段为你轻松铺就扎实的基础,从前端网页布局的搭建到后台PHP开发,助你从零基础到掌握主流开发语言。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师