फ्लोट के लिए PHP स्ट्रिंग


120

मैं PHP से बिल्कुल भी परिचित नहीं हूँ और एक त्वरित प्रश्न था।

मैं 2 चर है pricePerUnitऔर InvoicedUnits। यहाँ कोड है जो इन्हें मानों पर सेट कर रहा है:

$InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits);
$pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit);

यदि मैं इसका उत्पादन करता हूं, तो मुझे सही मूल्य मिलते हैं। कहते हैं कि 5000चालान की गई इकाइयाँ और 1.00कीमत के लिए।

अब, मुझे खर्च की गई कुल राशि दिखाने की आवश्यकता है। जब मैं इन दोनों को एक साथ गुणा करता हूं तो यह काम नहीं करता है (जैसा कि अपेक्षित है, ये तार हैं)।

लेकिन मेरे पास PHP में वेरिएबल / कास्ट / कन्वर्ट करने के तरीके का कोई सुराग नहीं है।

मुझे क्या करना चाहिए?

जवाबों:


201
$rootbeer = (float) $InvoicedUnits;

आपके लिए करना चाहिए। की जाँच करें टाइप-करतब दिखाने । आपको संख्याओं में स्ट्रिंग रूपांतरण भी पढ़ना चाहिए ।


इसकी सबसे सरल विधि .. लेकिन कभी-कभी मैं कुछ डेटाबेस कॉन्फिग और VARCHAR>11लंबाई के साथ ऐसा करने वाले मुद्दों में चला गया हूँ .. अभी तक संकुचित नहीं हुआ है।
तलवी वटिया

2
^ ध्यान देने योग्य है कि (फ्लोट) स्ट्रिंग से 0 निकालता है अगर यह पहला अंक है

इसके अलावा कि "11,000.00" इच्छा उत्पादन 11 के बजाय उम्मीद 11,000.00 ध्यान दें
CodeJunkie

64

आप गैर-स्थानीय-जागरूक floatvalफ़ंक्शन चाहते हैं :

फ्लोट फ्लोटवल (मिश्रित $ var) - एक स्ट्रिंग का फ्लोट मान प्राप्त करता है।

उदाहरण:

$string = '122.34343The';
$float  = floatval($string);
echo $float; // 122.34343

4
स्थानीय-जागरूकता का उल्लेख करने के लिए यश। मैंने अभी हाल ही में 1,5h को अलग-अलग स्थानों के कारण ट्रैक करने में एक समस्या का सामना किया, जिसके कारण (float)पहले सर्वर को "," और दूसरे को "," में परिवर्तित किया गया
डॉ। जियानलुइगी ज़ेन ज़ैनेटिनी

23

खैर, अगर उपयोगकर्ता 1,00,000 लिखता है तो फ्लोटवर त्रुटि दिखाएगा। इसलिए -

floatval(preg_replace("/[^-0-9\.]/","",$input));

यह बहुत अधिक विश्वसनीय है।

उपयोग:

$input = '1,03,24,23,434,500.6798633 this';
echo floatval(preg_replace("/[^-0-9\.]/","",$input));

7
इसके बजाय एरेग उपयोग preg $string=preg_replace("/[^0-9\.\-]/","",$string);
ontananza

4
हां, ereg, इस फंक्शन को DEPRECated किया गया है। इसलिए
ereg

9

फ्लोट में मार्कअप से निपटना एक गैर तुच्छ कार्य है। अंग्रेजी / अमेरिकी संकेतन में आप एक हजार से अधिक प्रारूपित करते हैं 46*10-2:

1,000.46

लेकिन जर्मनी में आप अल्पविराम और बिंदु बदलेंगे:

1.000,46


यह बहु-भाषा अनुप्रयोगों में सही संख्या का अनुमान लगाने में वास्तव में कठिन बनाता है।
मैं Zend_Measureइस कार्य के लिए Zend फ्रेमवर्क का उपयोग करने का दृढ़ता से सुझाव देता हूं । यह घटक उपयोगकर्ताओं को भाषा द्वारा स्ट्रिंग को फ्लोट पर ले जाएगा।


3
आजकल (+3 वर्ष), कोई भी विस्तार के साथ PHP 5.3 के रूप में नंबरफार्मेर का उपयोग कर सकता है intl
ज़मानट्स

1
PHP 5.3 तब उपलब्ध था जब मैंने प्रश्न का उत्तर दिया था, लेकिन आपकी टिप्पणी तक मुझे इस एकल फ़ंक्शन के बारे में पता नहीं था, क्योंकि दर्जनों पुस्तकालय कुछ इसी तरह के हैं। लेकिन उनके पास स्थानों का इतना अच्छा कवरेज नहीं होगा जितना कि अंतः विस्तार है। धन्यवाद, मैं इसे याद करने की कोशिश करूँगा।
तोबियास पी।

1

इस फ़ंक्शन का उपयोग किसी भी प्रकार की पाठ शैली से एक फ्लोट मान प्राप्त करने के लिए करें:

function parseFloat($value) {
    return floatval(preg_replace('#^([-]*[0-9\.,\' ]+?)((\.|,){1}([0-9-]{1,3}))*$#e', "str_replace(array('.', ',', \"'\", ' '), '', '\\1') . '.\\4'", $value));
}

यह समाधान किसी भी स्थानीय सेटिंग पर निर्भर नहीं है। इस प्रकार उपयोगकर्ता इनपुट के लिए उपयोगकर्ता किसी भी तरह से फ्लोट मान टाइप कर सकते हैं। यह वास्तव में मददगार है जैसे कि जब आपके पास कोई प्रोजेक्ट होता है जो केवल अंग्रेजी में होता है लेकिन पूरी दुनिया में लोग इसका उपयोग कर रहे हैं और यह ध्यान में नहीं रख सकते हैं कि प्रोजेक्ट फ्लोट वैल्यू के लिए अल्पविराम के बजाय डॉट चाहता है। आप मिश्रण में जावास्क्रिप्ट फेंक सकते हैं और ब्राउज़र को डिफ़ॉल्ट सेटिंग्स ला सकते हैं लेकिन फिर भी कई लोग इन मूल्यों को अंग्रेजी में सेट करते हैं लेकिन फिर भी 1.25 के बजाय 1,25 टाइप कर रहे हैं (विशेष रूप से अनुवाद उद्योग, अनुसंधान और आईटी तक सीमित नहीं)


यह बुरा क्यों है, इस पर कोई टिप्पणी नहीं / कहां विफल हो जाती है?
हफेनक्रानिक

या इसी तरह लचीला तरीका है जो तेज है?
हाफेनक्रानिक

1
यह ई ध्वज का उपयोग करता है, जो "अब समर्थित नहीं है"। ऐसा मेरा अनुमान है।
लीफ

0

मैं इसे करने के लिए मानक तरीके के साथ एक समस्या में चल रहा था:

$string = "one";

$float = (float)$string;

echo $float; : ( Prints 0 )

यदि कोई वैध संख्या नहीं है, तो पार्सर को एक नंबर वापस नहीं करना चाहिए, यह एक त्रुटि फेंकना चाहिए। (यह एक शर्त है जिसे मैं अपने कोड YMMV में पकड़ने की कोशिश कर रहा हूं)

इसे ठीक करने के लिए मैंने निम्नलिखित कार्य किए हैं:

$string = "one";

$float = is_numeric($string) ? (float)$string : null;

echo $float; : ( Prints nothing )

फिर रूपांतरण को आगे बढ़ाने से पहले, मैं एक त्रुटि की जाँच कर सकता हूँ और यदि स्ट्रिंग का एक वैध पार्स नहीं था।


0

यदि आपको उन मानों को संभालने की आवश्यकता है जिन्हें अलग से परिवर्तित नहीं किया जा सकता है, तो आप इस विधि का उपयोग कर सकते हैं:

try {
    $valueToUse = trim($stringThatMightBeNumeric) + 0;
} catch (\Throwable $th) {
    // bail here if you need to
}

0

PHP में किसी स्ट्रिंग / संख्या को संख्या / फ्लोट / दशमलव में कैसे परिवर्तित करें, इस बारे में अधिक जानने के लिए आप इस लिंक का अनुसरण कर सकते हैं । यहाँ इस लिंक SAYS क्या है ...

विधि 1: number_format () फ़ंक्शन का उपयोग करना। नंबर में एक स्ट्रिंग को बदलने के लिए नंबर_फॉर्मैट () फ़ंक्शन का उपयोग किया जाता है। यह सफलता पर स्वरूपित संख्या देता है अन्यथा यह विफलता पर E_WARNING देता है।

$num = "1000.314"; 

//Convert string in number using  
//number_format(), function 
echo number_format($num), "\n"; 

//Convert string in number using  
//number_format(), function 
echo number_format($num, 2); 

विधि 2: टाइप कास्टिंग का उपयोग करना: टाइपकास्टिंग सीधे स्ट्रिंग को फ्लोट, डबल या पूर्णांक आदिम प्रकार में बदल सकता है। यह बिना किसी फ़ंक्शन के स्ट्रिंग को संख्या में बदलने का सबसे अच्छा तरीका है।

// Number in string format 
$num = "1000.314"; 

// Type cast using int 
echo (int)$num, "\n"; 

// Type cast using float 
echo (float)$num, "\n"; 

// Type cast using double 
echo (double)$num; 

विधि 3: intval () और floatval () फ़ंक्शन का उपयोग करना। इंटैल () और फ्लोटवल () फ़ंक्शन का उपयोग क्रमशः स्ट्रिंग को इसके संबंधित पूर्णांक और फ्लोट मान में बदलने के लिए भी किया जा सकता है।

// Number in string format 
$num = "1000.314"; 

// intval() function to convert  
// string into integer 
echo intval($num), "\n"; 

// floatval() function to convert 
// string to float 
echo floatval($num); 

विधि 4: 0 जोड़कर या गणितीय कार्य करके। स्ट्रिंग संख्या को स्ट्रिंग के साथ 0 जोड़कर पूर्णांक या फ्लोट में परिवर्तित किया जा सकता है। PHP में, गणितीय कार्य करते हुए, स्ट्रिंग को पूर्णांक में बदल दिया जाता है या अंतर्निहित रूप से फ्लोट किया जाता है।

// Number into string format 
$num = "1000.314"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0, "\n"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0.0, "\n"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0.1;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.