$quantity = filter_input(INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT);
輸入:100.25
爲什麼`FILTER_VALIDATE_NUMBER_FLOAT`常數會減小小數位字符?
輸出:10025
我怎樣才能保持.
人物?
$quantity = filter_input(INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT);
輸入:100.25
爲什麼`FILTER_VALIDATE_NUMBER_FLOAT`常數會減小小數位字符?
輸出:10025
我怎樣才能保持.
人物?
嘗試......
$quantity = filter_input(
INPUT_GET,
'quantity',
FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION
);
你想:
$quantity = filter_var(100.25, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
print_r($quantity);
Woops ..你會希望仍然使用filter_input
如您目前擁有的以及同一首有兩個參數。最後我用filter_var
,所以我可以在鍵盤測試,忘了改回:P
閱讀該文檔http://www.php.net/manual/en/filter.filters.sanitize.php表明FILTER_SANITIZE_NUMBER_FLOAT
具有以下作用:
刪除所有字符,除了數字,+ - 並且可選地,eE。
扭轉這個相當成形差一句:
這消除了除數字從輸入的所有字符(0-9)。使用可選標誌,也可以允許字符。 (點),(逗號)e(指數)和E(指數)
因此,您的代碼示例不是相乘,而是剝去小數點。
解決方案:
您需要的選項FILTER_FLAG_ALLOW_FRACTION
在你的函數調用設置爲允許小數點:
$quantity = filter_input(INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
或者,使用FILTER_VALIDATE_FLOAT
,具有快速反饋注意如果它不」 t匹配:
$quantity = (filter_input(INPUT_GET, 'quantity', FILTER_VALIDATE_FLOAT))
?filter_input(INPUT_GET, 'quantity', FILTER_VALIDATE_FLOAT):
"Invalid Decimal Number";
print_r($quantity);
已經回答了。文檔是[過濾器類型](http://www.php.net/manual/en/filter.filters.php)。不幸的是,它不是很直觀。在這種情況下,必須使用Sanitize過濾器,並且必須提供一個*補充*過濾器標誌(後者中缺失)。 – 2011-05-20 02:24:50
(此外,發佈的代碼不會乘以100:它會刪除「冒犯」的小數,請嘗試「100.1234」作爲輸入:-) – 2011-05-20 02:27:19