如何在 PHP 计算器中输入小数

问题描述 投票:0回答:1

我正在尝试学习 PHP,并且正在观看 Dani Krossing 的教程。我能够按照他的教程进行操作,并能够使用 HTML 和 PHP 构建一个计算器。但我遇到了一个问题,每当我尝试输入十进制数时,它都会删除“.”。符号并使其成为整数。因此,如果我将 12.3 和 3 加起来,结果就是 126,而不是 15.3。我尝试在线检查任何选项,但似乎没有任何效果。以下是我使用的代码

HTML 格式:

<h2>Calculator Activity</h2>
    
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
        <input type="text" name="num01" placeholder="Number one">
        <select name="operator">
            <option value="add">+</option>
            <option value="subtract">-</option>
            <option value="multiply">*</option>
            <option value="divide">/</option>
        </select>
        <input type="text" name="num02" placeholder="Number two">
        <button>Calculate</button>
    </form>

PHP 代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
            //Grab data from the form and sanitize

            $num01 = filter_input(INPUT_POST, "num01", FILTER_SANITIZE_NUMBER_FLOAT);
            $num02 = filter_input(INPUT_POST, "num02", FILTER_SANITIZE_NUMBER_FLOAT);
            $operator = htmlspecialchars($_POST["operator"]);

            // Error Handlers
            $errors = false;

            if(empty($num01) || empty($num02) || empty($operator)) {
                echo "Fill in all fields!";
                $errors = true;
            }
            
            if (!is_numeric($num01) || !is_numeric($num02)) {
                echo "Only numeric characters are allowed!";
                $errors = true;
            }

            // Calculate numbers if no erros
            if (!$errors) {
                $value = 0;
                switch ($operator) {
                    case "add":
                        $value = $num01 + $num02;
                        break;
                    case "subtract":
                        $value = $num01 - $num02;
                        break;
                    case "multiply":
                        $value = $num01 * $num02;
                        break;
                    case "divide":
                        $value = $num01 / $num02;
                        break;
                    default:
                        echo "Something went wrong!";
                }
                echo "Result = ".$value;
            }

        }
    ?>

提前谢谢您!

有任何可能的选项可以使其适用于十进制输入吗?

php
1个回答
0
投票

filter_input(INPUT_POST, "num01", FILTER_SANITIZE_NUMBER_FLOAT);造成问题。

这是因为 FILTER_SANITIZE_NUMBER_FLOAT 过滤器从浮点数中删除了所有“非法字符”(它认为)。

对于您的情况,您想要处理带小数位的数字,请替换

$num01 = filter_input(INPUT_POST, "num01", FILTER_SANITIZE_NUMBER_FLOAT);
$num02 = filter_input(INPUT_POST, "num02", FILTER_SANITIZE_NUMBER_FLOAT); 

$num01=$_POST["num01"];
$num02=$_POST["num02"];
© www.soinside.com 2019 - 2024. All rights reserved.