আমি একটি ডেটাগ্রিড থেকে দুটি মান পার্স করার চেষ্টা করছি। ক্ষেত্রগুলি সংখ্যাসূচক, এবং যখন তাদের কমা রয়েছে (উদাহরণস্বরূপ 554,20), আমি কমা পরে সংখ্যাগুলি পাব না। আমি চেষ্টা করেছি parseInt
এবং parseFloat
। কিভাবে আমি এটি করতে পারব?
আমি একটি ডেটাগ্রিড থেকে দুটি মান পার্স করার চেষ্টা করছি। ক্ষেত্রগুলি সংখ্যাসূচক, এবং যখন তাদের কমা রয়েছে (উদাহরণস্বরূপ 554,20), আমি কমা পরে সংখ্যাগুলি পাব না। আমি চেষ্টা করেছি parseInt
এবং parseFloat
। কিভাবে আমি এটি করতে পারব?
উত্তর:
যদি সেগুলি পৃথক মান হিসাবে বোঝানো হয় তবে এটি ব্যবহার করে দেখুন:
var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])
যদি সেগুলি একক মান হিসাবে বোঝানো হয় (যেমন ফরাসি ভাষায়, যেখানে অর্ধেক 0,5 লেখা থাকে)
var value = parseFloat("554,20".replace(",", "."));
+(string)
পরিবর্তে parseString(string)
নিচের @Stev দ্বারা প্রস্তাবিত। সুতরাং, প্রথম উদাহরণ হবে v1 = +(values[0]); v2 = +(values[1]);
।
6.000.000
। ফাংশনটি কেবল প্রথম কমা বিভাজক প্রতিস্থাপন করুন
আপনি কি কখনও এটি করার চেষ্টা করেছেন? : P
var str = '3.8';ie
alert( +(str) + 0.2 );
+ (স্ট্রিং) ফ্লোটে স্ট্রিং কাস্ট করবে।
কুশলী!
সুতরাং আপনার সমস্যা সমাধানের জন্য আপনি এই জাতীয় কিছু করতে পারেন:
var floatValue = +(str.replace(/,/,'.'));
+(str)
সমাধানটি সত্যিই পছন্দ করি - parseFloat
সংখ্যার পরে অবৈধ চরিত্রগুলিকে উপেক্ষা করে, সেই ক্ষেত্রে +(str)
ফিরে আসে NaN
, যা আমার প্রয়োজন ঠিক তাই।
কটাকে বিন্দুর সাথে প্রতিস্থাপন করুন।
এটি কেবল 554 প্রদান করবে:
var value = parseFloat("554,20")
এটি 554.20 এ ফিরে আসবে:
var value = parseFloat("554.20")
সুতরাং শেষ পর্যন্ত, আপনি কেবল ব্যবহার করতে পারেন:
var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))
এটি ভুলে যাবেন না যে parseInt()
কেবলমাত্র পূর্ণসংখ্যাগুলি পার্স করার জন্য ব্যবহার করা উচিত (কোনও ভাসমান পয়েন্ট নেই)। আপনার ক্ষেত্রে এটি কেবল 554 ফেরত আসবে Additionally অতিরিক্ত হিসাবে, একটি ফ্লোটে পার্সিয়ান্ট () কল করা সংখ্যার সাথে গোল করবে না: এটি তার তলটি নিবে (নিকটতম নিম্নতম পূর্ণসংখ্যা)।
মন্তব্যগুলি থেকে পেড্রো ফেরেরির প্রশ্নের উত্তর দেওয়ার জন্য বর্ধিত উদাহরণ:
যদি টেক্সটফিল্ডে হাজার হাজার বিভাজক বিন্দু থাকে তবে 1.234.567,99
অন্যটির সাথে আগেই তা নির্মূল করা যেতে পারে replace
:
var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))
আপনি যদি স্ট্রিং অবজেক্টটি এভাবে প্রসারিত করেন ..
String.prototype.float = function() {
return parseFloat(this.replace(',', '.'));
}
.. আপনি এটি এইভাবে চালাতে পারেন
"554,20".float()
> 554.20
পাশাপাশি বিন্দু সঙ্গে কাজ করে
"554.20".float()
> 554.20
typeof "554,20".float()
> "number"
@GusDeCool বা অন্য কেউ একাধিক সহস্র বিভাজক, এক উপায় এটা করতে প্রতিস্থাপন করার প্রয়াসে একটি Regex বিশ্বব্যাপী প্রতিস্থাপন হল: /foo/g
। কেবল মনে রাখবেন যে .
এটি একটি মেটাচার্যাক্টর, সুতরাং আপনাকে এড়াতে হবে বা বন্ধনীতে ( \.
বা [.]
) রাখতে হবে। এখানে একটি বিকল্প রয়েছে:
var str = '6.000.000';
str.replace(/[.]/g,",");
আপনি এই ফাংশনটি ব্যবহার করতে পারেন। এটি '' দিয়ে কমাগুলি প্রতিস্থাপন করবে এবং তারপরে এটি মানটিকে পার্সফ্ল্যাট করবে এবং তারপরে এটি আবার কমাগুলিকে মান অনুসারে সামঞ্জস্য করবে।
function convertToFloat(val) {
if (val != '') {
if (val.indexOf(',') !== -1)
val.replace(',', '');
val = parseFloat(val);
while (/(\d+)(\d{3})/.test(val.toString())) {
val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
}
}
return val;
}
আমার হাজার হাজার বিভাজক এবং দশমিক বিভাজক কী তা আগেই জানতাম না আমার একই সমস্যা ছিল। এটি করার জন্য আমি একটি লাইব্রেরি লেখা শেষ করেছি। আপনি যদি এটি আগ্রহী হন তবে তা এখানে: https://github.com/GuillaumeLeclerc/number-parsing
চেষ্টা
let str ="554,20";
let float = +str.replace(',','.');
let int = str.split(',').map(x=>+x);
console.log({float,int});