আমি কীভাবে কোনও স্ট্রিংকে পিএইচপি-তে কোনও সংখ্যায় রূপান্তর করব?


669

আমি মূল্যবোধ, এই ধরনের রূপান্তর করতে চান '3', '2.34', '0.234343'একটি সংখ্যা, ইত্যাদি। জাভাস্ক্রিপ্টে আমরা ব্যবহার করতে পারি Number(), তবে পিএইচপি-তে কি কোনও অনুরূপ পদ্ধতি উপলব্ধ?

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

62
পাঠক সাবধান: এই প্রশ্নের সঠিক উত্তর নেই :(
ম্যাথিউ নাপোলি

@ ম্যাথিউউনাপোলির উত্তরটি হ'ল পিএইচপি সাধারণত আপনার জন্য এটি নির্ধারণ করে - একটি গতিশীল টাইপ সিস্টেমের সুবিধা ks
কলব ক্যানিয়ন

12
অনিশ্চয়তার সমস্ত শৃঙ্খলা এবং 'সাধারণত' দিয়ে।
27

2
@ ম্যাথিউউ নাপোলি কীভাবে টাইপ কাস্টিং একটি "আসল উত্তর" নয়? এমনকি আপনি যদি এটির বিষয়ে শিশু হতে চান তবে টাইপকাস্টের পরে টাইপটিও পরীক্ষা করতে পারেন
কলব ক্যানিয়ন

3
@ ম্যাথিউ নাপোলি আমি আনন্দিত যে আপনি নিজের বক্তব্যটি পরিষ্কার করে দিয়েছিলেন যে এটি করার উপায় নেই তার চেয়ে বিড়ালের চামড়ার একাধিক উপায় রয়েছে। উদাহরণস্বরূপ, ডাটাবেস ক্রিয়াকলাপে কাস্টিং খুব গুরুত্বপূর্ণ। উদাহরণস্বরূপ, প্যারামিটারাইজড পিডিও ক্যোয়ারিতে, পার্সারের পক্ষে এটি একটি সংখ্যা এবং স্ট্রিং নয়, তা বোঝার জন্য মাঝে মাঝে লড়াই করতে হবে এবং তারপরে আপনি একটি পূর্ণসংখ্যার ক্ষেত্রের সাথে 0 দিয়ে শেষ করবেন কারণ আপনি স্ট্রিংটি কোনও প্রান্তে ফেলেছেন নি did পরামিতি পদক্ষেপে।
stubstਹੀizard

উত্তর:


1030

আপনার সাধারণত এটি করার দরকার নেই, যেহেতু বেশিরভাগ পরিস্থিতিতে পিএইচপি আপনার জন্য প্রকারটি জোর করে। এমন পরিস্থিতিতে যেখানে আপনি স্পষ্টভাবে টাইপটি রূপান্তর করতে চান, এটিকে কাস্ট করুন:

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

4
এখানে পরিস্থিতি কিছুটা আলাদা আমি যে কোনও স্ট্রিংকে (কেবলমাত্র সংখ্যা রয়েছে) একটি সাধারণ সংখ্যায় রূপান্তর করতে চাই। ইউ জাভাস্ক্রিপ্ট মধ্যে হয়তো জানেন যে আমরা ব্যবহার করতে পারি parseInt () ধর্মান্তরিত স্ট্রিং => int- এ বা parseFloat () ধর্মান্তরিত স্ট্রিং => ভাসা করতে। তবে সাধারণ জাভা স্ক্রিপ্ট স্ট্রিং => সংখ্যা রূপান্তর করতে নম্বর () ব্যবহার করুন। আমি পিএইচপি তে একই পদ্ধতি চাই?
সারা

4
আমার জন্য কার্যকর ছিল যখন আমার কাছে পূর্ণ তারিখের স্ট্রিং থেকে প্রাপ্ত মাসের সংখ্যা ছিল, তবে আমি মথ নামের অ্যারে থেকে কোনও মান টানতাম। অটো কাস্টিং এখানে ঘটে না কারণ স্ট্রিং সূচকগুলি বৈধ, তবে সমতুল্য নয়।
কাজুমা নিই কাভালকান্তি

19
প্রসঙ্গের উপর নির্ভর করে, এটি .দশমিক পয়েন্ট বিভাজক বলে ধরে নেওয়া নিরাপদ হবে না । en.wikedia.org/wiki/…
ডেভ জার্ভিস

3
@ সারা: আপনি প্রথমে পূর্ণসংখ্যায় কাস্ট করে স্ট্রিংটিকে সংখ্যায় রূপান্তর করার জন্য একটি ফাংশন তৈরি করতে পারেন , তারপরে ভাসতে এবং তারপরে উভয় মান (পূর্ণসংখ্যা এবং ভাসমান) সমান হয় কিনা তার তুলনা করতে পারেন। যদি তা হয় তবে আপনার মানটি পূর্ণসংখ্যার হিসাবে ফেরত দেওয়া উচিত, যদি তা না হয় তবে একটি ভাসা হিসাবে। আশা করি ধারণাটি পেয়ে যাবেন।
Youstay Igo 4'8

2
সিস্টেম ফাইল করার জন্য আপনার পূর্বে পূর্ণসংখ্যার পাস করতে হবে এমন সময় আছে, পিএইচপি আপনার জন্য রূপান্তর করার জন্য অপেক্ষা করা ভাল ধারণা নয়।
এএএ

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)
ছদ্মবেশ

4
@ ডাউনভোটার, আমি জানি না আমার উত্তরটিতে কী দোষ আছে। নোট করুন যে ওপি তার প্রশ্ন সম্পাদনার আগে আমি এটি পোস্ট করেছি, তবে এটি সম্পাদিত প্রশ্নকেও ( $num = "10" + 1উদাহরণ) কভার করে covers
ফারদাদাদ

2
@ এডি-টা: আপনি যদি স্ট্রিংগুলি পাস করেন তবে এটি 0 এর পরিবর্তে ন্যূনতম / সর্বাধিক মানটি ফিরে আসবে তা বেশ নিশ্চিত। অর্থাৎ intval("9999999999")==2147483647
রিভ

6
intvalদরকারী কারণ কারণ আপনি এটি ব্যবহার করতে পারেন array_map('intval', $arrayOfStrings);যা আপনি ingালাইয়ের সাথে করতে পারবেন না।
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
আইএমএইচও, এটি কেবলমাত্র সঠিক উত্তর কারণ এটি কেবলমাত্র সংখ্যার স্ট্রিংয়ের মূলটিকে বিবেচনা করে। সংখ্যার স্ট্রিংয়ে যদি এক বা একাধিক নেতৃস্থানীয় শূন্য থাকে তবে কেবলমাত্র টাইপ কাস্ট ব্যবহার করে এমন সমস্ত প্রতিক্রিয়া (এমনকি তারা ব্যবহারকারী-সংজ্ঞায়িত ফাংশনের পরামর্শ দেয়) ব্যর্থ হবে এবং স্ট্রিংটি অষ্টাল বেস সহ একটি সংখ্যা হিসাবে চিহ্নিত না হয়।
সিনট্যাক্স জ্যাঙ্কি

আমি যদি "12.7896" এ রূপান্তর করতে চাই তবে কোনও ধারণা 12.7896?
অ্যাগনেস পলিট

স্ট্রিংকে একটি ফ্লোটে রূপান্তর করতে ফ্লোটওয়াল () ব্যবহার করুন। ফ্লোটওয়াল ("12.7896") ফিরে আসবে 12.7896
গোপেকা

কেন এটি গৃহীত উত্তর নয়? একজন পিএইচপি বহিরাগত হিসাবে আমি ইতিমধ্যে জানতাম যে (int)$my_strআমি কাজ করব না যেহেতু আমি বিশেষভাবে স্ট্রিং পছন্দগুলি 01নিয়ে কাজ করছি এবং 013আমি বেস 10 হিসাবে ব্যাখ্যা করতে চাই ... সুতরাং আমি বেসটি স্পষ্টভাবে সরবরাহ করার উপায় চেয়েছিলাম।
গিয়াকোমো আলজেটা

48

যে কোনও (স্বল্প-টাইপযুক্ত) ভাষায় আপনি সর্বদা একটি সংখ্যার সাথে একটি শূন্য যুক্ত করে একটি স্ট্রিং কাস্ট করতে পারেন।

যাইহোক, এটির খুব সামান্য ধারণা আছে কারণ এই পরিবর্তনশীলটি ব্যবহারের সময় পিএইচপি এটি স্বয়ংক্রিয়ভাবে করবে এবং আউটপুট দেওয়ার সময় এটি কোনওভাবেই স্ট্রিংয়ে ফেলে দেওয়া হবে।

নোট করুন যে আপনি বিন্দুযুক্ত সংখ্যাগুলি স্ট্রিং হিসাবে রাখতে চান, কারণ ভাসা ভাসানোর পরে ভাসা সংখ্যার প্রকৃতির কারণে এটি অনাকাঙ্ক্ষিতভাবে পরিবর্তন করা যেতে পারে।


35
এমন অনেকগুলি ভাষা রয়েছে যেখানে আপনি শূন্য যুক্ত করে সংখ্যায় একটি স্ট্রিং কাস্ট করতে পারবেন না, এটি সাধারণত ingালাইয়ের বৈধ পদ্ধতির পরিবর্তে ত্রুটি হিসাবে বিবেচিত হয় :)।
জান্পেপেক

4
honzasp ঠিক আছে, উদাহরণস্বরূপ জাভাস্ক্রিপ্টে typeof('123'+0)দেয় 'string', কারণ '123'+0দেয় '1230'
ওরিওল

5
দ্রষ্টব্য, পিএইচপি-তে প্রস্তাব দেওয়া হয় যে বেশিরভাগ সময় আপনি ব্যবহার করুন === শৈলীর তুলনা। সুতরাং আপনি যদি নিজের ডেটার সাথে তুলনা করতে থাকেন তবে এটি কী ধরণের সংরক্ষণ করা হয়েছে তা খুব গুরুত্বপূর্ণ
জনাথন

মনে রাখবেন যে শূন্য যুক্ত করে আপনি সত্যিকার অর্থে 'কাস্টিং' করছেন না, আপনি মূলত রূপান্তর করছেন।
সিএসᵠ

12
জাভাস্ক্রিপ্টে @oriol 0+'123'আপনার পেতে সংখ্যাটি শূন্যের সাথে যুক্ত করতে হবে123
টিমো হুভিনেন

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'তবে এর জন্য $value = '4', আপনি লিখতে পারেন:

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

এটি কিছুটা নোংরা, তবে এটি কাজ করে।


3
সম্ভবত কম নোংরা? strpos($val, '.') === false ? intval($val) : floatval($val);
jchook

4
@ জেচুক সম্ভবত স্থানীয়ভাবে নির্ভরশীল কারণ এটি '0.4' এর পরিবর্তে '0,4'।
নিক রাইস

ভাল যুক্তি. আমি মনে করি আপনি localeconv()['decimal_point']পরিবর্তে ব্যবহার করতে পারে '.'strposসমাধানটির একটি সুবিধা হ'ল এটি প্রায় 2x প্রায় দুইবার কাস্টিংয়ের মতো দ্রুত।
jchook

2
@jchook যে বিরতি মামলা পছন্দ হয় তার উপর 2.1e2, এটা দশমিক বিন্দু আছে, কিন্তু এর ফলে সংখ্যা পূর্ণসংখ্যা
Tomáš Blatný

1
কেবল +পরিচয় অপারেটরটি ব্যবহার করুন :, var_dump(+'0.4', +'4')আপনাকে একটি ভাসা এবং একটি int দেয়। php.net/manual/en/language.operators.arithmetic.php
tvanc

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এটিতে একটি যুক্ত করতে পারেন এবং পিএইচপি স্বয়ংক্রিয়ভাবে ফলাফলকে একটি সংখ্যার আকারে রূপান্তর করবে।

// 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

হ্যাঁ, পিএইচপি তে একটি অনুরূপ পদ্ধতি রয়েছে তবে এটি এত কম জানা যায় যে আপনি এটি সম্পর্কে খুব কমই শুনবেন। এটি " সনাক্তকরণ " নামে পরিচিত একটি গাণিতিক অপারেটর , এখানে বর্ণিত:

অ্যারিমেটিক অপারেটর

একটি সংখ্যার স্ট্রিংকে একটি সংখ্যায় রূপান্তর করতে, নিম্নলিখিত হিসাবে করুন:

$a = +$a;

সতর্কতা: হ্যাক সনাক্ত হয়েছে।
গ্রেগ

হাই @ গ্রেগ আপনি কি এখানে পোস্ট করা লিঙ্কটি ক্লিক করেছেন? এই অপারেটরটি সম্পর্কে বিকাশকারীরা এটি বলেছিলেন: যথাযথ হিসাবে ভাসমান int a থেকে রূপান্তর বা flo "রূপান্তর", এখানে, একটি সংখ্যা থেকে সংখ্যার রূপান্তর হিসাবে বোঝা যায় না। কেন? কারণ একচেটিয়া গণিতের দৃষ্টিকোণ থেকে, এই অপারেটরটি একেবারেই অকেজো! "+1" (পরিচয় ফাংশনের সমতুল্য) দ্বারা যে কোনও সংখ্যাকে গুণ করা এর উপর সম্পূর্ণরূপে কোনও প্রভাব ফেলে না। সুতরাং, আমি এখানে প্রস্তাবিত ধরণের রূপান্তর চেয়ে এই অপারেটরের জন্য অন্যান্য উপযোগিতা কল্পনা করতে পারি না।

@ গ্রেগ - অবশ্যই অন্যান্য উত্তরগুলির তুলনায় এটি হ্যাক কম । এটি একটি বিল্ট-ইন অপারেটর, যা অনুরোধ করা হয়েছিল ঠিক তাই করে। (যদিও এটি প্রথম চেক করা সম্ভবত সেরা is_numeric, তবে স্ট্রিংগুলি হ্যান্ডেল করার জন্য কোড রাখার মতো জায়গা রয়েছে যা সঠিকভাবে রূপান্তর করতে পারে না))
টুলমেকারস্টেভ

আমি বুঝতে পেরেছি যে কাস্টিংয়ের জন্য এটি একটি গাণিতিক অপারেটরটি ব্যবহার করতে পুরোপুরি কাজ করে তবে এটি মিস করা সত্যিই সহজ। আমি মনে করি এটি একটি সতর্কতা মূল্যবান।
গ্রেগ

11

উত্তরের জন্য কেবলমাত্র একটি সামান্য নোট যা কিছু ক্ষেত্রে কার্যকর এবং নিরাপদ হতে পারে। আপনি প্রথমে স্ট্রিংটিতে একটি বৈধ সংখ্যাসূচক মান রয়েছে কিনা তা পরীক্ষা করে দেখতে পারেন এবং কেবলমাত্র এটির পরে এটি একটি সংখ্যার প্রকারে রূপান্তরিত করুন (উদাহরণস্বরূপ যদি আপনাকে ডিবি থেকে আগত ডেটা ম্যানিপুলেট করতে হয় যা ইনটগুলিকে স্ট্রিংগুলিতে রূপান্তর করে)। আপনি 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 এবং একটি ফ্লোটে পরিণত করি। যদি ইনট এবং ফ্লোট একই হয় (যেমন, 5 == 5.0) তবে আমরা ইনট মানটি ফিরিয়ে দেব। যদি ইনট এবং ফ্লোট একই রকম হয় না (যেমন, 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 দিয়ে গুণ করা It এটি সংক্ষেপণ সমস্যার সমাধান করে, কারণ "+" চিহ্নটির জাভাস্ক্রিপ্টে একাধিক ব্যবহার রয়েছে, যখন "*" চিহ্নটি নিখুঁতভাবে রয়েছে গাণিতিক গুণনের জন্য।

পিএইচপি সম্পর্কে আমি এখানে যা দেখেছি তার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে একটি সংখ্যা হিসাবে স্ট্রিংটি সংখ্যার হিসাবে ব্যাখ্যা করতে ইচ্ছুক (এবং যোগ করার বিষয়ে মন্তব্যগুলি, যেহেতু পিএইচপি-তে "+" নিখুঁতভাবে গাণিতিক সংযোজনের জন্য), এই গুণক কৌশলটি ঠিক কাজ করে পিএইচপি জন্য, এছাড়াও।

আমি এটি পরীক্ষা করেছি এবং এটি কাজ করে ... যদিও আপনি স্ট্রিংটি কীভাবে অর্জন করেছেন তার উপর নির্ভর করে আপনি 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;
    }
}

পার্সে নিউমেরিক সেট সহ কলিং টাইপ পরীক্ষার আগে সংখ্যার স্ট্রিংগুলিতে রূপান্তরিত হবে।

এভাবে:

টাইপ ("5", সত্য) পূর্বে ফিরে আসবে

টাইপ ("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 :) দ্বারা ভাগ করারও পরামর্শ দিতে পারি
বয়কোদেভ

1
এটা একটা বিষয়! :) উপায় দ্বারা আপনার সমাধান উপরের সমস্ত বৈজ্ঞানিক স্বরলিপি তুলনায় অনেক ভাল । ধন্যবাদ.
drugan

এই সমাধানটি আমার সমস্যার সমাধান করেছে। আমার ক্ষেত্রে, $id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;$ টার্গেট_আইডি_ক্রোন = (ইনট) $ আইডি_ক্রোন - 1 এর পরিবর্তে;
InMILD

1
A non well formed numeric value encounteredস্ট্রিংটি ফ্লোটে পরিবর্তন করতে চাইলে আমি এই ত্রুটিটি পেয়েছি$num = '12,24' * 1 । যেকোনো পরামর্শ?
অ্যাগনেস পলিট

5
$a = "10";

$b = (int)$a;

আপনি এইটিকে পিএইচপি- তে কোনও স্ট্রিংকে ইনটিতে রূপান্তর করতে ব্যবহার করতে পারেন ।


2
যদি প্রবেশ করা নম্বরটি '7.2345' হয় তবে আমি (ইনট) ব্যবহার করতে পারি না তবে আমাকে (ফ্লোট) ব্যবহার করতে হবে। আমার যা দরকার তা হ'ল একটি সাধারণ সমাধান।
সারা

1
আপনি সর্বদা ডাবল বা ভাসা ব্যবহার করতে পারেন।
প্রিটম

5

কেবল আপনি এই মত লিখতে পারেন:

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

3
এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে সে সম্পর্কে অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
অ্যালেক্স রিয়াবভ

1
আপনি যদি এই বিষয়ে নিশ্চিত? এটি কোনও স্ট্রিংকে একটি সংখ্যায় রূপান্তরিত করবে না, তবে একটি অ্যারেটিকে JSON স্ট্রিংয়ে রূপান্তর করবে
নিকো হােস

হ্যাঁ, @ নিকোহেস যদি একটি অ্যারেতে স্ট্রিং ফর্ম্যাটে থাকে তবে এটি একটি সংখ্যায় রূপান্তরিত হবে।
ডমিনিক অমল জো এফ

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

Historicalতিহাসিক কারণে ভাসমানের ক্ষেত্রে "ডাবল" ফিরিয়ে দেওয়া হয়।

পিএইচপি ডকুমেন্টেশন


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
   $str = "3.148";
   $num = $str;

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

আমি এটা রাখতে চাই না। আমি এটিকে রূপান্তর করতে এবং এটি একটি ভেরিয়েবলে সংরক্ষণ করতে চাই।
সারা

1
এই স্বয়ংক্রিয়ভাবে এটিকে একটি ফ্লোটে রূপান্তরিত করেছে। পিএইচপি-র আলগা ধরণের রূপান্তরটি এটি আপনার জন্য করে। যদিও এটি আপনি যা প্রত্যাশা করেছিলেন তা না করে তবে সুস্পষ্ট রূপান্তর সহ অন্যান্য উত্তরগুলি আপনার পক্ষে আরও ভাল কাজ করতে পারে।
এড্রিয়ান কর্নিশ

$ স্ট্রিটে প্রিন্টফ ব্যবহার করে '5' বা '5.258' থাকতে পারে ("% f \ n", $ str) '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_*, কাজ করবে না যেহেতু variableএকটি হল: 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

আমি প্রশ্ন পেয়েছি "বলুন আপনি পিএইচপি-তে স্ট্রিংয়ের সাথে একটি পূর্ণসংখ্যা castালার জন্য বিল্ট ইন ফাংশন লিখছিলেন, কোনও প্রোগ্রামিং সাক্ষাত্কারে আপনি কীভাবে সেই ফাংশনটি লিখবেন"। এখানে একটি সমাধান।

$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

আমি উত্তরের মাধ্যমে পড়ছি এবং পিএইচপি'র নম্বর রূপান্তরটির মধ্যে সবচেয়ে বড় ক্যাভিয়েটের উল্লেখ কেউ দেখেনি।

সর্বাধিক উত্সাহিত উত্তর নিম্নলিখিতটি করার পরামর্শ দেয়:

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

উজ্জ্বল। পিএইচপি সরাসরি কাস্টিং করে। তবে আমরা যদি নিম্নলিখিতটি করি?

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

পিএইচপি কি এই জাতীয় রূপান্তরকে বৈধ মনে করে?

স্পষ্টতই হ্যাঁ

পিএইচপি স্ট্রিংটি পড়ছে যতক্ষণ না এটি প্রয়োজনীয় ধরণের জন্য প্রথম অ-সংখ্যাসূচক অক্ষর খুঁজে পায়। মানে যে পূর্ণসংখ্যার জন্য, সংখ্যার অক্ষরগুলি [0-9]। ফলস্বরূপ, এটি পড়ছে 3, যেহেতু এটি [0-9] চরিত্রের সীমার মধ্যে রয়েছে তাই এটি পড়া চালিয়ে যায়। রাউন্ডআপ. এবং সেখানে স্টপ এটি [0-9] সীমার মধ্যে না যেহেতু।

আপনি ভাসা বা ডাবল কাস্ট করতে হয় একই ঘটনা ঘটবে। পিএইচপি পড়বে 3, তারপরে ., তারপরে এবং 1তারপরে 4থামবে iকারণ এটি বৈধ ফ্লোট সংখ্যাটির অক্ষর নয়।

ফলস্বরূপ, "million" >= 1000000মিথ্যাতে "1000000million" >= 1000000মূল্যায়ন করে তবে মূল্যায়ণ করে true

আরো দেখুন:

https://www.php.net/manual/en/language.operators.compistance.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); optionচ্ছিকভাবে এটিকে আবার ডিকোড করুন
  3. ?
  4. লাভ!

7
স্ট্যাক ওভারফ্লো প্রশ্নগুলির উত্তর সম্পর্কে, রসিকতা নয়। আমি নিশ্চিত যে এর জন্য সেখানে খুব একটা জায়গা রয়েছে তবে এই জায়গাটি এটি নয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.