2011-05-20 7 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 फ़िल्टर दोनों का उपयोग किया जाना चाहिए और एक * पूरक * फ़िल्टर ध्वज (जो पोस्ट में गायब है) इस स्थिति में आपूर्ति की जानी चाहिए। –

+0

(इसके अलावा, पोस्ट कोड 100 से गुणा नहीं करता है: यह "अपमानजनक" दशमलव को हटा देता है, इनपुट के रूप में "100.1234" आज़माएं :-) –

उत्तर

37

इस प्रयास करें ...

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

CodePad

+7

मुझे इस फ़िल्टर के बिंदु को 'FILTER_FLAG_ALLOW_FRACTION' के बिना समझ में नहीं आता है - निश्चित रूप से "फ्लोट" की बहुत परिभाषा यह है कि इसमें "फ्लोटिंग" बिंदु यानी दशमलव है? – Andy

+0

@ एंडी मुझे लगता है कि कारण है ... PHP। : डी – alex

+0

मुझे लगता है कि आप सही हैं, मैंने अपने सिर को अन्य PHP अजीबता के बारे में कुछ बार खरोंच कर दिया है क्योंकि मैंने उस टिप्पणी को लिखा है PS: आपकी वेबसाइट फ़ॉन्ट मुझे पुराने स्कूल बिंदु की याद दिलाती है और गेम पर क्लिक करती है :) – Andy

5

आप चाहते हैं:

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

print_r($quantity); 

http://codepad.org/ch66qJru

ओह .. आप वर्तमान में एक ही पहले दो args के रूप में भी है के रूप में आप अभी भी filter_input का उपयोग करना चाहेंगे। मैं filter_var का उपयोग कर तो मैं codepad में यह परीक्षण कर सकते हैं समाप्त हो गया है और इसे वापस बदलने के लिए भूल गया: पी

18

प्रलेखन http://www.php.net/manual/en/filter.filters.sanitize.php से पता चलता FILTER_SANITIZE_NUMBER_FLOAT निम्नलिखित प्रभाव पड़ता है कि पढ़ना:

अंक को छोड़कर सभी वर्ण निकाल दें, + - और वैकल्पिक रूप से।, ईई।

के आसपास इस बल्कि खराब गठन वाक्य ओर मुड़ते:

इस अंक को छोड़कर इनपुट से सभी पात्रों को हटा (0-9)। वैकल्पिक झंडे के साथ, पात्रों को भी अनुमति देना संभव है। (डॉट), (कॉमा) ई (एक्सपोनेंट) और ई (एक्सपोनेंट)

तो, आपका कोड उदाहरण गुणा नहीं कर रहा है, लेकिन यह दशमलव बिंदु को अलग कर रहा है।

समाधान:

आप दशमलव बिंदु अनुमति देने के लिए अपने समारोह कॉल में विकल्प FILTER_FLAG_ALLOW_FRACTION निर्धारित करने की आवश्यकता:,

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

वैकल्पिक रूप से FILTER_VALIDATE_FLOAT उपयोग करते हैं, एक त्वरित प्रतिक्रिया नोट के साथ करता है, तो यह नहीं करता है टी मैच:

$quantity = (filter_input(INPUT_GET, 'quantity', FILTER_VALIDATE_FLOAT)) 
       ?filter_input(INPUT_GET, 'quantity', FILTER_VALIDATE_FLOAT): 
       "Invalid Decimal Number"; 

    print_r($quantity); 
संबंधित मुद्दे