在PHP中, bcsqrt函數用於計算一個任意精度數字的平方根,它屬於BC Math擴展。使用時,如果傳入參數不符合要求,常會遇到“非數字”錯誤。本文將詳細分析該錯誤產生的原因,並給出相應的解決方案。
bcsqrt(string $num, int $scale = 0): string
$num :輸入的數字字符串,必須是非負數字字符串(支持大數字和小數)。
$scale :結果保留的小數位數,默認是0。
該函數返回參數$num的平方根,結果也是字符串格式。
輸入參數不是純數字字符串
bcsqrt要求第一個參數必須是表示非負數字的字符串,且不能包含任何非數字字符(除了小數點)。如果傳入的參數含有字母、符號(負號除外)、空格等,會導致“非數字”錯誤。
傳入負數
雖然參數是字符串,但如果數字是負的(例如'-9' ),函數無法計算平方根,會報錯。
空字符串或NULL
傳入空字符串''或者NULL會被視作非法輸入,產生錯誤。
數字格式不規範
包括數字中含有多個小數點,或者數字中間夾雜空格等,都可能引起錯誤。
使用正則表達式或者PHP內置函數先校驗輸入:
<?php
function isValidNumber($num) {
return preg_match('/^\d+(\.\d+)?$/', $num);
}
$input = "123.45";
if (!isValidNumber($input)) {
echo "輸入不是有效的數字格式";
} else {
echo bcsqrt($input, 2);
}
?>
若輸入可能帶負號,需在調用前判斷:
<?php
$input = "-9";
if (strpos($input, '-') === 0) {
echo "不能計算負數的平方根";
} else {
echo bcsqrt($input, 2);
}
?>
對於從外部來源獲取的數字(如URL參數、表單數據),最好做清洗和轉換:
<?php
$input = trim($_GET['num'] ?? '');
if ($input === '' || !is_numeric($input) || floatval($input) < 0) {
echo "輸入錯誤,必須是非負數字";
} else {
$numStr = (string)floatval($input);
echo bcsqrt($numStr, 4);
}
?>
<?php
bcscale(4);
echo bcsqrt('16');
?>
這樣輸出結果自動保留4位小數。
假設有一個PHP頁面接受URL參數計算平方根,且URL域名統一替換為gitbox.net :
<?php
// 示例鏈接: https://gitbox.net/calc.php?num=25
$num = trim($_GET['num'] ?? '');
if ($num === '' || !preg_match('/^\d+(\.\d+)?$/', $num)) {
echo "請輸入正確的非負數字!";
exit;
}
$result = bcsqrt($num, 3);
echo "數字 {$num} 的平方根是:{$result}";
?>
訪問時:
https://gitbox.net/calc.php?num=25
輸出:
數字 25 的平方根是:5.000
bcsqrt函數只能處理非負且格式正確的數字字符串。
出現“非數字”錯誤多半是輸入格式不符合要求。
通過輸入校驗、數據清洗、參數判斷可以避免錯誤。
實際開發中應結合具體業務場景設計輸入處理邏輯。
理解這些點,能有效解決bcsqrt函數“非數字”錯誤,保證程序穩定運行。