2011-05-20 60 views
24
$quantity = filter_input(INPUT_GET, 'quantity', FILTER_SANITIZE_NUMBER_FLOAT); 

輸入:100.25爲什麼`FILTER_VALIDATE_NUMBER_FLOAT`常數會減小小數位字符?

輸出:10025

我怎樣才能保持.人物?

+0

已經回答了。文檔是[過濾器類型](http://www.php.net/manual/en/filter.filters.php)。不幸的是,它不是很直觀。在這種情況下,必須使用Sanitize過濾器,並且必須提供一個*補充*過濾器標誌(後者中缺失)。 – 2011-05-20 02:24:50

+0

(此外,發佈的代碼不會乘以100:它會刪除「冒犯」的小數,請嘗試「100.1234」作爲輸入:-) – 2011-05-20 02:27:19

回答

37

嘗試......

$quantity = filter_input(
       INPUT_GET, 
       'quantity', 
       FILTER_SANITIZE_NUMBER_FLOAT, 
       FILTER_FLAG_ALLOW_FRACTION 
      ); 

CodePad

+7

我不明白這個過濾器沒有'FILTER_FLAG_ALLOW_FRACTION'的要點 - 當然, 「浮動」的定義非常重要,它有一個「浮動」點,即小數點? – Andy 2015-05-01 13:11:02

+0

@Andy我認爲原因是... PHP。 :D – alex 2016-04-04 10:01:29

+0

我認爲你是對的,自從我寫這篇評論以來,我一直在撓撓我的腦海中的其他PHP怪異PS:你的網站字體讓我想起舊學校的點和點擊遊戲:) – Andy 2016-04-04 10:07:13

5

你想:

$quantity = filter_var(100.25, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 

print_r($quantity); 

http://codepad.org/ch66qJru

Woops ..你會希望仍然使用filter_input如您目前擁有的以及同一首有兩個參數。最後我用filter_var,所以我可以在鍵盤測試,忘了改回:P

18

閱讀該文檔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); 
0

或者,使用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); 
相關問題