পিএইচপি স্ট্রিং টু ফ্লোট


120

আমি পিএইচপি এর সাথে মোটেই পরিচিত নই এবং একটি দ্রুত প্রশ্ন ছিল।

আমার 2 টি ভেরিয়েবল রয়েছে pricePerUnitএবং InvoicedUnits। এখানে কোডগুলি যা মানগুলিতে সেট করে চলেছে:

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

যদি আমি এটি আউটপুট করি তবে আমি সঠিক মানগুলি পাই। 5000চালিত ইউনিট এবং 1.00দামের জন্য বলুন ।

এখন, আমার ব্যয় করা মোট পরিমাণটি দেখানো দরকার। আমি যখন এই দুটিকে একসাথে গুটিয়ে ফেলি তখন এটি কাজ করে না (যেমন প্রত্যাশা করা হয়, এগুলি স্ট্রিং)।

তবে পিএইচপি-তে কীভাবে ভেরিয়েবলগুলি পার্স / কাস্ট / রূপান্তর করতে হয় সে সম্পর্কে আমার কোনও ধারণা নেই।

আমার কি করা উচিৎ?

উত্তর:


201
$rootbeer = (float) $InvoicedUnits;

এটা আপনার জন্য করা উচিত। পরীক্ষা করে দেখুন প্রকার-জাগলিং । আপনার নাম্বারে স্ট্রিং রূপান্তরটি পড়া উচিত ।


এটি সবচেয়ে সহজ পদ্ধতি .. তবে মাঝেমধ্যে আমি নির্দিষ্ট ডাটাবেস কনফিগার এবং VARCHAR>11দৈর্ঘ্যে এটি করার সমস্যাগুলিতে চলে এসেছি .. ঠিক এখনও কেন সংকীর্ণ হয়নি।
তালভি ওয়াটিয়া

2

এছাড়াও মনে রাখবেন যে "11,000.00" প্রত্যাশিত 11000.00 এর পরিবর্তে 11 আউটপুট দেবে
কোডজঙ্কি

64

আপনি অ-লোকেল-সচেতন floatvalফাংশনটি চান :

ভাসা ভাসমান (মিশ্রিত বর্ণ) - একটি স্ট্রিংয়ের ভাসমান মান পান।

উদাহরণ:

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

4
স্থানীয়-সচেতনতা উল্লেখ করার জন্য কুদোস। আমি (float)প্রথম সার্ভারে "," এবং দ্বিতীয়টিতে "," রূপান্তর করার কারণে বিভিন্ন লোকাল দ্বারা সৃষ্ট একটি সমস্যা সন্ধান করতে কেবল 1,5 ঘন্টা ব্যয় করেছি
ডাঃ জিয়ানলাইগি জেন ​​জ্যানেটিটিনি 22:36

23

ঠিক আছে, ব্যবহারকারী যদি ১,০০,০০০ লিখে থাকেন তবে ফ্লোটওয়ার ত্রুটি দেখাবে। সুতরাং -

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

এটি অনেক বেশি নির্ভরযোগ্য।

ব্যবহার:

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

7
বদলে ereg ব্যবহার preg $string=preg_replace("/[^0-9\.\-]/","",$string);
ontananza

4
হ্যাঁ, ইরেগ, এই ফাংশনটি অগ্রাহ্য করা হয়েছে। সুতরাং পরিবর্তে ereg :) preg ব্যবহার করতে প্রয়োজন
হাদি

9

ফ্লোটে মার্কআপ নিয়ে কাজ করা একটি তুচ্ছ কাজ নয়। ইংরেজি / আমেরিকান স্বরলিপিতে আপনি এক হাজার প্লাস বিন্যাস করেছেন 46*10-2:

1,000.46

তবে জার্মানিতে আপনি কমা এবং বিন্দুটি পরিবর্তন করবেন:

1.000,46


এটি বহু ভাষা অ্যাপ্লিকেশনগুলিতে সঠিক সংখ্যাটি অনুমান করা খুব কঠিন করে তোলে।
আমি Zend_Measureএই কাজের জন্য জেন্ডার ফ্রেমওয়ার্কটি দৃ strongly়ভাবে ব্যবহার করার পরামর্শ দিচ্ছি । এই উপাদানটি ব্যবহারকারী ভাষার দ্বারা স্ট্রিংটিকে একটি ফ্লোটে পার্স করবে।


3
আজকাল (+3 বছর), কেউ এক্সটেনশন সহ পিএইচপি 5.3 হিসাবে নাম্বার ফর্ম্যাটার ব্যবহার করতে পারে intl
zamnuts

1
পিএইচপি 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
এটি ই পতাকা ব্যবহার করে, যা "আর সমর্থিত নয়"। এটা আমার অনুমান।
Leif

0

এটি করার মানক উপায় নিয়ে আমি একটি সমস্যায় পড়ছিলাম:

$string = "one";

$float = (float)$string;

echo $float; : ( Prints 0 )

যদি কোনও বৈধ সংখ্যা না থাকে তবে পার্সারটিকে কোনও নম্বর ফেরত দেওয়া উচিত নয়, এটি একটি ত্রুটি ছুঁড়ে ফেলা উচিত। (এই শর্তটি আমি আমার কোড, ওয়াইএমএমভিতে ধরার চেষ্টা করছি)

এটি ঠিক করার জন্য আমি নিম্নলিখিতগুলি করেছি:

$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

পিএইচপি-তে কোনও স্ট্রিং / সংখ্যাটিকে কীভাবে নম্বর / ফ্লোট / দশমিক হিসাবে রূপান্তর করতে হয় সে সম্পর্কে আরও জানতে আপনি এই লিঙ্কটি অনুসরণ করতে পারেন । এখানে এই লিঙ্কটি কী বলে ...

পদ্ধতি 1: নম্বর_ফর্ম্যাট () ফাংশন ব্যবহার করে। সংখ্যা_ ফর্ম্যাট () ফাংশনটি স্ট্রিংকে একটি সংখ্যায় রূপান্তর করতে ব্যবহৃত হয়। এটি সাফল্যে ফর্ম্যাট নম্বরটি দেয় অন্যথায় এটি ব্যর্থতার 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: প্রকারের ingালাই ব্যবহার: টাইপকাস্টিং স্ট্রিংকে সরাসরি ফ্লোট, ডাবল বা পূর্ণসংখ্যার প্রারম্ভিক টাইপে রূপান্তর করতে পারে। কোনও ফাংশন ছাড়াই একটি স্ট্রিংকে একটি সংখ্যায় রূপান্তর করার সর্বোত্তম উপায়।

// 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: ইনটুল () এবং ফ্লোটওয়াল () ফাংশন ব্যবহার করে। ইন্টিভাল () এবং ফ্লোটওয়াল () ফাংশনগুলি যথাক্রমে স্ট্রিংটিকে তার যথাযথ পূর্ণসংখ্যা এবং ভাসমান মানগুলিতে রূপান্তর করতে ব্যবহার করা যেতে পারে।

// 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 যুক্ত করে ভাসতে পারে। পিএইচপি-তে, গাণিতিক ক্রিয়াকলাপ সম্পাদন করে স্ট্রিংটি একটি পূর্ণসংখ্যায় রূপান্তরিত হয় বা স্পষ্টভাবে ভাসে।

// 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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.