मैं PHP में एक स्ट्रिंग को संख्या में कैसे बदलूं?


670

मैं मूल्यों, के इन प्रकार परिवर्तित करना चाहते हैं '3', '2.34', '0.234343'एक नंबर करने के, आदि। जावास्क्रिप्ट में हम उपयोग कर सकते हैं Number(), लेकिन क्या कोई समान विधि PHP में उपलब्ध है?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545

62
पाठक सावधान रहें: इस प्रश्न का कोई वास्तविक उत्तर नहीं है :(
मथिउ नपोली

@MatthieuNapoli इसका उत्तर यह है कि आमतौर पर Php आपके लिए यह आंकड़ा बनाता है - एक डायनामिक प्रकार प्रणाली के भत्तों में से एक।
कोलोब कैनियन

12
अनिश्चितता और 'आमतौर पर' की सभी श्रृंखलाओं के साथ।
person27

2
@MatthieuNapoli टाइपिंग एक "वास्तविक जवाब" कैसे नहीं है? आप टाइप करने के बाद भी टाइप कर सकते हैं यदि आप इसके बारे में एक बच्चा बनना चाहते हैं
Kolob Canyon

3
@ मैथ्यू न्यनपोली मुझे खुशी है कि आपने अपनी बात स्पष्ट कर दी है कि एक बिल्ली के लिए एक से अधिक तरीके हैं, बल्कि ऐसा करने का कोई तरीका नहीं है। उदाहरण के लिए, डेटाबेस संचालन में कास्टिंग बहुत महत्वपूर्ण है। उदाहरण के लिए, एक पैरामीटरित PDO क्वेरी पर, पार्सर के लिए कभी-कभी एक संघर्ष होगा, यह महसूस करने के लिए कि यह एक संख्या है और एक स्ट्रिंग नहीं है, और फिर आप एक पूर्णांक फ़ील्ड में 0 के साथ समाप्त होते हैं क्योंकि आपने स्ट्रिंग को एक इंट में नहीं डाला था पैरामीटर चरण में।
स्टबस्टेब्लॉगर

जवाबों:


1031

आपको आमतौर पर ऐसा करने की आवश्यकता नहीं है, क्योंकि PHP अधिकांश परिस्थितियों में आपके लिए प्रकार को कम करेगा। उन स्थितियों के लिए जहां आप स्पष्ट रूप से प्रकार बदलना चाहते हैं, इसे डालें :

$num = "3.14";
$int = (int)$num;
$float = (float)$num;

4
यहां स्थिति थोड़ी अलग है मैं किसी भी स्ट्रिंग (केवल संख्या) को सामान्य संख्या में बदलना चाहता हूं। जैसा कि U को javaScript में पता चल सकता है कि हम string => int या parseFloat () को string => float में बदलने के लिए parseInt () का उपयोग कर सकते हैं । लेकिन सामान्य javaScript में स्ट्रिंग => नंबर बदलने के लिए नंबर () का उपयोग किया जाता है। मुझे php में एक समान विधि चाहिए?
सारा

4
यह मेरे लिए तब उपयोगी था जब मेरे पास एक महीने की संख्या थी जो एक पूर्ण तिथि स्ट्रिंग से प्राप्त की गई थी, जो कि मैं एक कीट नाम सरणी से एक मूल्य खींचता था। ऑटो कास्टिंग यहां नहीं होती है क्योंकि स्ट्रिंग इंडेक्स मान्य हैं, लेकिन समकक्ष नहीं हैं।
काजुमा एनवाई कैवलन्ती

19
संदर्भ के आधार पर, यह मान लेना सुरक्षित नहीं हो सकता .है कि दशमलव बिंदु विभाजक है। en.wikipedia.org/wiki/…
डेव जार्विस

3
@ तारा: आप स्ट्रिंग को संख्या में बदलकर पहले पूर्णांक में, फिर फ्लोट में और फिर दोनों मानों (पूर्णांक और फ्लोट) के बराबर होने पर तुलना करने के लिए एक फ़ंक्शन बना सकते हैं। यदि वे हैं, तो आपको पूर्णांक के रूप में मान वापस करना चाहिए, यदि नहीं, तो फ्लोट के रूप में। आशा है आपको आइडिया मिल जाएगा।
Youstay Igo

2
कई बार आपको फ़ाइल सिस्टम में पूर्णांक को पास करने की आवश्यकता होती है, यह आपके लिए रूपांतरण करने के लिए PHP की प्रतीक्षा करने के लिए एक अच्छा विचार नहीं है।
एएए

173

ऐसा करने के कुछ तरीके हैं:

  1. अंकीय अंकीय डेटा प्रकारों के तार काटें:

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
  2. स्ट्रिंग्स पर गणित संचालन करें:

    $num = "10" + 1;
    $num = floor("10.1");
  3. उपयोग intval()या floatval():

    $num = intval("10");
    $num = floatval("10.1");
  4. का उपयोग करें settype()


9
ध्यान दें कि इसके (double)लिए सिर्फ एक उपनाम है (float)
deceze

4
@downvoter, मुझे नहीं पता कि मेरे उत्तर में क्या गलत है। ध्यान दें कि मैंने ओपी को उसके प्रश्न को संपादित करने से पहले यह पोस्ट किया था, हालांकि यह संपादित प्रश्न को भी शामिल करता है ( $num = "10" + 1उदाहरण)।
फरजाद

2
@ एड-टा: बहुत यकीन है कि यदि आप इसके लिए तार पास करते हैं तो यह 0 के बजाय न्यूनतम / अधिकतम मान लौटाएगा। Ie intval("9999999999")==2147483647
riv

6
intvalउपयोगी है क्योंकि तब आप इसका उपयोग कर सकते हैं array_map('intval', $arrayOfStrings);जिसमें आप ढलाई नहीं कर सकते।
icc97

2
इसके बजाय $num = "10" + 1;इसका उपयोग करना बेहतर है $num = "10" * 1;क्योंकि यह मूल्य (गुणन के तटस्थ तत्व) को नहीं बदलेगा, यह अनिवार्य रूप से कुछ ऐसा है जैसे toNumber(..)कि अंतिम प्रकार से निर्धारित किया जाएगा कि स्ट्रिंग "10" को बदलने के लिए क्या आवश्यक है -> (इंट) 10; "10.1" -> (फ्लोट) 10.1;
होली

57

समस्याओं से बचने के लिए प्रयास करें intval($var)। कुछ उदाहरण:

<?php
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34 (octal as starts with zero)
echo intval('042');                   // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26 (hex as starts with 0x)
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
?>

4
IMHO, यह एकमात्र सही उत्तर है क्योंकि यह एकमात्र ऐसा है जो संख्यात्मक स्ट्रिंग के मूलांक को ध्यान में रखता है। सभी प्रतिक्रियाएं (यहां तक ​​कि एक उपयोगकर्ता-परिभाषित फ़ंक्शन का सुझाव देने वाले) जो केवल एक प्रकार के कलाकारों का उपयोग करते हैं, यदि संख्यात्मक स्ट्रिंग में एक या अधिक अग्रणी शून्य हैं, तो विफल हो जाएगा, और स्ट्रिंग एक ओक्टल बेस के साथ संख्या के रूप में नहीं है।
सिंटेक्स जंक्ती

किसी भी विचार अगर मैं "12.7896" में बदलना चाहते हैं 12.7896?
एग्नेस पालिट

एक नाव को एक स्ट्रिंग में बदलने के लिए फ्लोटवल () का उपयोग करें। फ्लोटवल ("12.7896") 12.7896
गोपेका

यह स्वीकृत उत्तर क्यों नहीं है? PHP के एक बाहरी व्यक्ति के रूप में मैं पहले से ही जानता था कि (int)$my_strमैं काम नहीं करूंगा क्योंकि मैं विशेष रूप से तार के साथ काम कर रहा था 01और 013यह कि मैं बेस 10 के रूप में व्याख्या करना चाहता हूं ... इसलिए मैं स्पष्ट रूप से आधार प्रदान करने का एक तरीका चाहता था।
जियाको अल्जेटा

48

जिस भी (शिथिल टाइप की) भाषा में आप हमेशा एक शून्य को जोड़कर उसे एक संख्या में जोड़ सकते हैं।

हालांकि, इसमें बहुत कम समझ है क्योंकि PHP इस चर का उपयोग करने के समय स्वचालित रूप से करेगी, और इसे आउटपुट के समय किसी भी तार पर डाला जाएगा।

ध्यान दें कि आप डॉटेड संख्याओं को स्ट्रिंग्स के रूप में रखना चाह सकते हैं, क्योंकि फ्लोट करने के लिए कास्टिंग के बाद फ्लोट नंबरों की प्रकृति के कारण इसे अप्रत्याशित रूप से बदला जा सकता है।


35
ऐसी कई भाषाएं हैं जहां आप एक शून्य जोड़कर संख्या को स्ट्रिंग नहीं कर सकते हैं, यह आमतौर पर कास्टिंग के एक वैध तरीके के बजाय एक त्रुटि माना जाता है :)।
जनवरी 19paček

4
honzasp सही है, उदाहरण के लिए जावास्क्रिप्ट में typeof('123'+0)देता है 'string', क्योंकि '123'+0देता है '1230'
ओरियल

5
ध्यान दें, PHP में यह अनुशंसा की जाती है कि आप ज्यादातर समय === शैली की तुलना का उपयोग करें। तो आप अपने डेटा की तुलना की जाएगी कि यह बहुत आवश्यक है कि वह किस प्रकार में संग्रहित है।
जोनाथन

ध्यान दें कि एक शून्य जोड़कर आप सही मायने में 'कास्टिंग' नहीं कर रहे हैं, आप मूल रूप से परिवर्तित कर रहे हैं।
CS

12
@oriol जावास्क्रिप्ट में आप शून्य करने के लिए संख्या जोड़ने की जरूरत है 0+'123'पाने के लिए123
टीमो Huovinen

24

आप उपयोग कर सकते हैं:

(int)(your value);

या आप उपयोग कर सकते हैं:

intval(string)

क्या होगा यदि दर्ज संख्या '2.3456' है तो मुझे 2.3456 कैसे मिलेगा?
सारा

6
सवाल झांकियों के बारे में भी है।
taseenb

मुझे 1 लाइनफ्रेम ओपी दिखाएं जहां यह तैरता है? पास टिप्पणियों और डाउन वोट से पहले मूल पोस्ट को देखें।
noobie-php

2
उदाहरण फ़्लोट दिखाता है, यह पूछ रहा है कि संख्यात्मक तार को संख्यात्मक मान (फ़्लोट्स और पूर्णांक) में कैसे परिवर्तित किया जाए
taseenb

पहले जांच लें कि क्या संख्या एक फ्लोट के साथ है is_float, और यदि वह गुजरती है तो (float)इसके बजाय के साथ डाली जाए (int)
मार्टिन वैन ड्रेल

24

यदि आप एक फ्लोट चाहते हैं $value = '0.4', लेकिन इसके लिए int $value = '4', आप लिख सकते हैं:

$number = ($value == (int) $value) ? (int) $value : (float) $value;

यह थोड़ा गंदा है, लेकिन यह काम करता है।


3
संभवतः कम गंदे? strpos($val, '.') === false ? intval($val) : floatval($val);
jchook

4
@jchook संभवतः गंदे हो क्योंकि यह स्थानीय-निर्भर है - उदाहरण के लिए '0.4' के बजाय '0,4'।
निक राइस

अच्छी बात। मुझे लगता है आप के localeconv()['decimal_point']बजाय उपयोग कर सकते हैं '.'strposसमाधान का एक फायदा यह है कि यह दो बार कास्टिंग के रूप में लगभग 2x है।
jchook

2
@jchook जैसे मामलों पर टूट जाता है 2.1e2, इसमें दशमलव बिंदु होता है, लेकिन परिणामी संख्या पूर्णांक होती है
Tomáš Blatný

1
बस +पहचान ऑपरेटर का उपयोग करें : var_dump(+'0.4', +'4')आपको एक फ्लोट और एक इंट देता है। php.net/manual/en/language.operators.arithmetic.php
टीवी

15

आप इसमें हमेशा शून्य जोड़ सकते हैं!

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)

मुझे यह त्रुटि मिली A non well formed numeric value encountered। कोई उपाय?
एग्नेस पैलिट

15

इसके बजाय यह चुनने के लिए कि क्या आपको इसमें कनवर्ट करना stringहै intया नहीं float, आप इसे केवल एक जोड़ सकते हैं 0, और PHP स्वचालित रूप से परिणाम को एक संख्यात्मक प्रकार में बदल देगा।

// Being sure the string is actually a number
if (is_numeric($string))
    $number = $string + 0;
else // Let the number be 0 if the string is not a number
    $number = 0;

13

में पीएचपी आप उपयोग कर सकते हैं intval(string) or floatval(string)कार्यों नंबरों के लिए तार कन्वर्ट करने के लिए।


4
नहीं, मैं एक सामान्य तरीका चाहता हूं। जिसका अर्थ है कि यदि इसका '5' => इसे 5 में परिवर्तित किया जाना चाहिए और यदि इसका '2.345' => तो इसे 2.345 में बदलना चाहिए।
सारा

13

हां, PHP में एक समान विधि है, लेकिन यह इतना कम ज्ञात है कि आप इसके बारे में शायद ही कभी सुनेंगे। यह एक अरिथमेटिक ऑपरेटर है जिसे " पहचान " कहा जाता है , जैसा कि यहाँ वर्णित है:

अंकगणित संचालक

संख्यात्मक स्ट्रिंग को एक संख्या में बदलने के लिए, निम्नानुसार करें:

$a = +$a;

चेतावनी: हैक का पता चला।
ग्रेग

हाय @Greg क्या आपने यहां पोस्ट किए गए लिंक पर क्लिक किया? डेवलपर्स ने इस ऑपरेटर के बारे में क्या कहा है: $ a को इंट में बदलना या उचित के रूप में फ्लोट करना। "रूपांतरण", यहाँ, संख्या-से-संख्या रूपांतरण के रूप में नहीं समझा जा सकता है। क्यों? क्योंकि एक विशेष अंकगणितीय दृष्टिकोण से, यह ऑपरेटर बिल्कुल बेकार है! किसी भी संख्या को "+1" (पहचान समारोह के समतुल्य) से गुणा करने पर इसका कोई प्रभाव नहीं पड़ता है। इसलिए, मैं इस ऑपरेटर के लिए अन्य उपयोगिता की कल्पना नहीं कर सकता, जैसा कि यहां दिए गए रूपांतरण से किया गया है।
aldemarcalazans

@Greg - निश्चित रूप से यह हैक की तुलना में कम है, अधिकांश अन्य उत्तरों की तुलना में। इसका एक बिल्ट-इन ऑपरेटर है, जो वास्तव में अनुरोध किया गया था। (हालांकि यह शायद सबसे पहले जांच करने के लिए सबसे अच्छा है is_numeric, इसलिए तारों को संभालने के लिए कोड रखने के लिए एक जगह है जो सही ढंग से परिवर्तित नहीं हो सकती है।)
टूलमेकरसैट

मैं समझता हूं कि यह कास्टिंग के लिए एक अंकगणितीय ऑपरेटर का उपयोग करने के लिए पूरी तरह से काम करता है, लेकिन यह वास्तव में याद करना आसान है। मुझे लगता है कि यह एक चेतावनी के लायक है।
ग्रेग

11

उन उत्तरों पर थोड़ा ध्यान दें जो कुछ मामलों में उपयोगी और सुरक्षित हो सकते हैं। आप यह जांचना चाहते हैं कि क्या स्ट्रिंग में वास्तव में पहले एक मान्य संख्यात्मक मान होता है और उसके बाद ही इसे एक संख्यात्मक प्रकार में परिवर्तित किया जाता है (उदाहरण के लिए यदि आपको db से आने वाले डेटा में हेरफेर करना है जो ints को तार में परिवर्तित करता है)। आप उपयोग कर सकते हैं is_numeric()और फिर floatval():

$a = "whatever"; // any variable

if (is_numeric($a)) 
    var_dump(floatval($a)); // type is float
else 
    var_dump($a); // any type

9

यहां वह फ़ंक्शन है जो प्राप्त करता है जिसे आप ढूंढ रहे हैं। पहले हम जांचते हैं कि क्या मूल्य को संख्या के रूप में समझा जा सकता है, यदि हम इसे एक इंट और फ्लोट में बदल दें। यदि int और float समान हैं (जैसे, 5 == 5.0) तो हम int मान वापस करते हैं। यदि int और float समान नहीं हैं (जैसे, 5! = 5.3) तो हम मानते हैं कि आपको फ़्लोट की शुद्धता की आवश्यकता है और इस मान को लौटाएँ। यदि मूल्य संख्यात्मक नहीं है, तो हम एक चेतावनी फेंक देते हैं और अशक्त हो जाते हैं।

function toNumber($val) {
    if (is_numeric($val)) {
        $int = (int)$val;
        $float = (float)$val;

        $val = ($int == $float) ? $int : $float;
        return $val;
    } else {
        trigger_error("Cannot cast $val to a number", E_USER_WARNING);
        return null;
    }
}

6

मैंने पाया है कि जावास्क्रिप्ट में एक स्ट्रिंग को संख्या में बदलने का एक सरल तरीका यह है कि इसे 1. से गुणा किया जाए। यह समसामयिक समस्या को हल करता है, क्योंकि "+" प्रतीक का जावास्क्रिप्ट में कई उपयोग हैं, जबकि "*" प्रतीक विशुद्ध रूप से है। गणितीय गुणन के लिए।

PHP के बारे में जो मैंने यहां देखा है उसके आधार पर स्वचालित रूप से एक अंक के रूप में एक अंक युक्त स्ट्रिंग की व्याख्या करने के लिए तैयार किया जा रहा है (और जोड़ने के बारे में टिप्पणी, क्योंकि PHP में "+" विशुद्ध रूप से गणितीय जोड़ के लिए है), यह गुणा चाल ठीक काम करता है PHP के लिए भी।

मैंने इसका परीक्षण किया है, और यह काम करता है ... यद्यपि आपने स्ट्रिंग का अधिग्रहण कैसे किया है, इसके आधार पर, आप इसे 1 से गुणा करने से पहले ट्रिम () फ़ंक्शन को लागू करना चाह सकते हैं।


6

यहाँ एक समारोह है जो मैंने अपने लिए चीजों को सरल बनाने के लिए लिखा है:

यह बूलियन, पूर्णांक, डबल और वास्तविक के शॉर्टहैंड संस्करण भी लौटाता है।

function type($mixed, $parseNumeric = false)
{        
    if ($parseNumeric && is_numeric($mixed)) {
        //Set type to relevant numeric format
        $mixed += 0;
    }
    $t = gettype($mixed);
    switch($t) {
        case 'boolean': return 'bool'; //shorthand
        case 'integer': return 'int';  //shorthand
        case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
        default: return $t;
    }
}

ParseNumeric सेट को सही पर कॉल करने से टाइप करने से पहले संख्यात्मक स्ट्रिंग्स परिवर्तित हो जाएंगे।

इस प्रकार:

प्रकार ("5", सत्य) int वापस आएगा

प्रकार ("3.7", सच) फ्लोट लौटेगा

प्रकार ("500") स्ट्रिंग लौटाएगा

बस सावधान रहें क्योंकि यह एक प्रकार की झूठी जाँच पद्धति है और आपका वास्तविक चर अभी भी एक स्ट्रिंग होगा। जरूरत पड़ने पर आपको वास्तविक चर को सही प्रकार में बदलना होगा। मुझे सिर्फ यह जाँचने की आवश्यकता है कि डेटाबेस को किसी आइटम आईडी या उपनाम को लोड करना चाहिए या नहीं, इस प्रकार कोई भी अप्रत्याशित प्रभाव नहीं होगा क्योंकि इसे रन टाइम पर स्ट्रिंग के रूप में पार्स किया जाएगा।

संपादित करें

यदि आप यह पता लगाना चाहते हैं कि क्या वस्तुएं हैं, तो फ़ंक्शन इस मामले को स्विच में जोड़ते हैं:

case 'object': return is_callable($mixed)?'function':'object';

6

बोयकोडोव के जवाब के अलावा मैं यह सुझाव देता हूं:

Input             Output
'2' * 1           2 (int)
'2.34' * 1        2.34 (float)
'0.3454545' * 1   0.3454545 (float)

इस बारे में थोड़ा सोचने के बाद, मैं
बॉयकोडेव

1
यह एक बिंदु है! :) वैसे आपका समाधान उपरोक्त सभी वैज्ञानिक नोटेशनों से बहुत बेहतर है । धन्यवाद।
ड्रगैन

इस समाधान से मेरी समस्या हल हो गई। मेरे मामले में, $id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;$ target_id_cron = (int) के बजाय $ id_cron - 1;
inMILD

1
मुझे यह त्रुटि A non well formed numeric value encounteredतब हुई जब मैं स्ट्रिंग को फ्लोट में बदलना चाहता हूं $num = '12,24' * 1। कोई उपाय?
एग्नेस पालिट

5
$a = "10";

$b = (int)$a;

आप इसका उपयोग PHP में एक स्ट्रिंग को एक इंट में बदलने के लिए कर सकते हैं ।


2
यदि दर्ज संख्या '7.2345' है तो मैं (int) का उपयोग नहीं कर सकता तो मुझे (फ्लोट) का उपयोग करना होगा। मुझे जो चाहिए वह एक सामान्य उपाय है।
सारा

1
आप हमेशा डबल या फ्लोट का उपयोग कर सकते हैं।
प्रीतम

5

बस आप इस तरह लिख सकते हैं:

<?php
    $data = ["1","2","3","4","5"];
    echo json_encode($data, JSON_NUMERIC_CHECK);
?>

3
हालांकि यह कोड इस प्रश्न का उत्तर दे सकता है, कि यह कोड क्यों और / या इस बारे में अतिरिक्त संदर्भ प्रदान करता है कि यह प्रश्न इसके दीर्घकालिक मूल्य में सुधार करता है।
एलेक्स रिआबोव

1
क्या तुम इसके बारे में निश्चित हो? यह स्ट्रिंग को संख्या में नहीं बदलेगा, लेकिन JSON स्ट्रिंग
Nico Haase

हां, @NicoHaase यदि संख्या एक सरणी में स्ट्रिंग प्रारूप में है तो यह संख्या में परिवर्तित हो जाएगी।
डोमिनिक अमल जो एफ

5

केवल संख्या को 1 से गुणा करें ताकि स्ट्रिंग को टाइप संख्या में बदल दिया जाए।

//String value
$string = "5.1"
if(is_numeric($string)){
  $numeric_string = $string*1;
}

काफी उचित है, लेकिन इस पद्धति (और इसी तरह की चाल) पहले से ही इस प्रश्न के 24 अन्य उत्तरों में सूचीबद्ध हैं - मुझे इसे फिर से पोस्ट करने में मूल्य नहीं दिखता है।
डेविड डब्ल्यूडब्ल्यूई

4

आप उपयोग कर सकते हैं:

((int) $var)   ( but in big number it return 2147483647 :-) )

लेकिन सबसे अच्छा समाधान का उपयोग करना है:

if (is_numeric($var))
    $var = (isset($var)) ? $var : 0;
else
    $var = 0;

या

if (is_numeric($var))
    $var = (trim($var) == '') ? 0 : $var;
else
    $var = 0;

2

आप निम्न प्रकार से डेटा प्रकार बदल सकते हैं

$number = "1.234";

echo gettype ($number) . "\n"; //Returns string

settype($number , "float");

echo gettype ($number) . "\n"; //Returns float

ऐतिहासिक कारणों से फ्लोट के मामले में "डबल" लौटाया जाता है।

PHP प्रलेखन


2

सभी सुझाव संख्यात्मक प्रकार खो देते हैं।

यह मुझे सबसे अच्छा अभ्यास लगता है:

function str2num($s){
// Returns a num or FALSE
    $return_value =  !is_numeric($s) ? false :               (intval($s)==floatval($s)) ? intval($s) :floatval($s);
    print "\nret=$return_value type=".gettype($return_value)."\n";
}

1

PHP आपके लिए यह सीमा के भीतर करेगी

<?php
   $str = "3.148";
   $num = $str;

   printf("%f\n", $num);
?>

मैं इसे लगाना नहीं चाहता। मैं इसे रूपांतरित करना चाहता हूं और इसे एक चर में सहेजना चाहता हूं।
सारा

1
इसने स्वचालित रूप से इसे एक फ्लोट में बदल दिया। PHP का ढीला प्रकार रूपांतरण आपके लिए करता है। यद्यपि यह वह नहीं कर सकता है जो आप अपेक्षा करते हैं इसलिए स्पष्ट रूपांतरण वाले अन्य उत्तर आपके लिए बेहतर काम कर सकते हैं।
एड्रियन कोर्निश

$ str में प्रिंटफ ("% f \ n", $ str) का उपयोग करके '5' या '5.258' हो सकता है। '5' को 5.280000 के लिए 5.000000 के रूप में रखा जाएगा (मैं इसे 5 के रूप में चाहता हूं) (मैं इसे 5.28 के रूप में चाहता हूं)। अधिक दशमलव अंक।
सारा

1

एक तरीका है:

$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);

उपयोग करना is_*काम नहीं करेगा, क्योंकि variablea: है string

के संयोजन का उपयोग करना json_encode()और फिर json_decode()इसे "वास्तविक" रूप में परिवर्तित कर दिया गया है। अगर यह सच है stringतो यह गलत होगा।

$num = "Me";
$int = (int)$num;
$float = (float)$num;

var_dump($num, $int, $float);

उत्पादन होगा: string(2) "Me" int(0) float(0)


0

मुझे सवाल मिला "कहो कि आप PHP में एक स्ट्रिंग के लिए पूर्णांक बनाने के लिए निर्मित फ़ंक्शन लिख रहे थे, आप एक प्रोग्रामिंग साक्षात्कार में" उस फ़ंक्शन को कैसे लिखेंगे। यहाँ एक समाधान है।

$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939; 
$string = ""; 
while ($int) { 
    $string .= $nums[$int % 10]; 
    $int = (int)($int / 10); 
} 
$result = strrev($string);

0

मैं जवाबों के माध्यम से पढ़ रहा हूं और किसी को भी PHP के नंबर रूपांतरण में सबसे बड़ी चेतावनी का उल्लेख नहीं करता।

सबसे उत्कीर्ण उत्तर निम्नलिखित करने का सुझाव देता है:

$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3

ये तो बहुत खूब है। PHP डायरेक्ट कास्टिंग करती है। लेकिन अगर हमने निम्नलिखित किया हो तो क्या होगा?

$str = "3.14is_trash"
$intstr = (int)$str

क्या PHP ऐसे रूपांतरणों को वैध मानता है?

जाहिरा तौर पर हाँ

PHP स्ट्रिंग को तब तक पढ़ता है जब तक उसे आवश्यक प्रकार के लिए पहला गैर-संख्यात्मक चरित्र नहीं मिल जाता है। मतलब है कि पूर्णांक के लिए, संख्यात्मक वर्ण हैं [0-9]। परिणामस्वरूप, यह पढ़ता है 3, क्योंकि यह [0-9] वर्ण श्रेणी में है, यह पढ़ना जारी रखता है। पुस्तकें. और वहाँ रुक जाता है क्योंकि यह [0-9] रेंज में नहीं है।

यदि आप फ्लोट या डबल करने के लिए कास्ट किए जाते हैं तो भी यही होगा। पीएचपी पढ़ता था 3, तो ., तो 1, फिर 4, और कम से बंद कर देंगेi जब तक कि यह वैध फ्लोट न्यूमेरिक कैरेक्टर न हो।

परिणामस्वरूप, "million" >= 1000000झूठ का मूल्यांकन करता है, लेकिन "1000000million" >= 1000000मूल्यांकन करता हैtrue

यह सभी देखें:

https://www.php.net/manual/en/language.operators.comparison.php तुलना करने पर कैसे रूपांतरण होते हैं

https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion कैसे स्ट्रिंग्स को संबंधित संख्याओं में परिवर्तित किया जाता है।


0

यदि आप पहले से नहीं जानते हैं कि आपके पास एक फ्लोट या पूर्णांक है,
और यदि स्ट्रिंग में विशेष वर्ण (जैसे अंतरिक्ष, €, आदि)
हो सकते हैं , और यदि इसमें 1 से अधिक डॉट या अल्पविराम
हो सकते हैं , तो आप इसका उपयोग कर सकते हैं समारोह:

// This function strip spaces and other characters from a string and return a number.
// It works for integer and float.
// It expect decimal delimiter to be either a '.' or ','
// Note: everything after an eventual 2nd decimal delimiter will be removed.
function stringToNumber($string) {
    // return 0 if the string contains no number at all or is not a string:
    if (!is_string($string) || !preg_match('/\d/', $string)) {
        return 0;
    } 

    // Replace all ',' with '.':
    $workingString = str_replace(',', '.', $string);

    // Keep only number and '.':
    $workingString = preg_replace("/[^0-9.]+/", "", $workingString);

    // Split the integer part and the decimal part,
    // (and eventually a third part if there are more 
    //     than 1 decimal delimiter in the string):
    $explodedString = explode('.', $workingString, 3);

    if ($explodedString[0] === '') {
        // No number was present before the first decimal delimiter, 
        // so we assume it was meant to be a 0:
        $explodedString[0] = '0';
    } 

    if (sizeof($explodedString) === 1) {
        // No decimal delimiter was present in the string,
        // create a string representing an integer:
        $workingString = $explodedString[0];
    } else {
        // A decimal delimiter was present,
        // create a string representing a float:
        $workingString = $explodedString[0] . '.' .  $explodedString[1];
    }

    // Create a number from this now non-ambiguous string:
    $number = $workingString * 1;

    return $number;
}

-8

अलग दृष्टिकोण:

  1. यह सब एक सरणी / साहचर्य सरणी में पुश करें।
  2. json_encode($your_array, JSON_NUMERIC_CHECK); वैकल्पिक रूप से इसे वापस डिकोड करें
  3. ?
  4. फायदा!

7
स्टैक ओवरफ्लो सवालों के जवाब के बारे में है, चुटकुले नहीं। मुझे यकीन है कि वहाँ उस के लिए एक जगह है, लेकिन यह जगह यह नहीं है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.