কীভাবে জাভাস্ক্রিপ্টে স্ট্রিংকে ফ্লোটে রূপান্তর করবেন?


255

আমি একটি ডেটাগ্রিড থেকে দুটি মান পার্স করার চেষ্টা করছি। ক্ষেত্রগুলি সংখ্যাসূচক, এবং যখন তাদের কমা রয়েছে (উদাহরণস্বরূপ 554,20), আমি কমা পরে সংখ্যাগুলি পাব না। আমি চেষ্টা করেছি parseIntএবং parseFloat। কিভাবে আমি এটি করতে পারব?


এছাড়াও দেখুন: stackoverflow.com/questions/24318654
dreftymac

উত্তর:


371

যদি সেগুলি পৃথক মান হিসাবে বোঝানো হয় তবে এটি ব্যবহার করে দেখুন:

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

যদি সেগুলি একক মান হিসাবে বোঝানো হয় (যেমন ফরাসি ভাষায়, যেখানে অর্ধেক 0,5 লেখা থাকে)

var value = parseFloat("554,20".replace(",", "."));

6
আপনি যেখানে হাজার সেপারেটর হিসাবে কমা ব্যবহার করেছেন সে সম্পর্কে কী? উদাহরণস্বরূপ 1234 লিখিত 1,234 হিসাবে
ক্রিস বি

6
আপনি কেবল কমাটি সরিয়ে ফেলতে পারলেন, তারপরে পার্স করুন। (উদাঃ এটি "" এর সাথে প্রতিস্থাপন করুন)
জেসি রুসাক

7
এটি খুব নিরাপদ নয়, হিসাবে স্ক্যানটো = পার্সফ্লোট ("5,, 5"। রিপ্লেস (",", "।")); এটি বৈধ সংখ্যা বলে বিশ্বাসের জন্য 5
জনকে

1
@ max4ever আপনি চুপটি গ্রহণ অবৈধ সংখ্যার সম্পর্কে উদ্বিগ্ন হন, তাহলে আপনি ব্যবহার করতে পারেন +(string)পরিবর্তে parseString(string)নিচের @Stev দ্বারা প্রস্তাবিত। সুতরাং, প্রথম উদাহরণ হবে v1 = +(values[0]); v2 = +(values[1]);
জেসি রুসাক

1
ব্যর্থ, আমার নম্বর যদি হয় 6.000.000। ফাংশনটি কেবল প্রথম কমা বিভাজক প্রতিস্থাপন করুন
GusDeCooL

55

আপনি কি কখনও এটি করার চেষ্টা করেছেন? : P

var str = '3.8';ie
alert( +(str) + 0.2 );

+ (স্ট্রিং) ফ্লোটে স্ট্রিং কাস্ট করবে।

কুশলী!

সুতরাং আপনার সমস্যা সমাধানের জন্য আপনি এই জাতীয় কিছু করতে পারেন:

var floatValue = +(str.replace(/,/,'.'));

7
আমি +(str)সমাধানটি সত্যিই পছন্দ করি - parseFloatসংখ্যার পরে অবৈধ চরিত্রগুলিকে উপেক্ষা করে, সেই ক্ষেত্রে +(str)ফিরে আসে NaN, যা আমার প্রয়োজন ঠিক তাই।
অ্যালেক্স

34

কটাকে বিন্দুর সাথে প্রতিস্থাপন করুন।

এটি কেবল 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(",","."))

সম্পর্কে কি "." হাজার হাজার বিভাজক? 4.554,20 এর মতো কি ফিরে আসবে ...?
পেড্রো

16

আপনি যদি স্ট্রিং অবজেক্টটি এভাবে প্রসারিত করেন ..

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

.. আপনি এটি এইভাবে চালাতে পারেন

"554,20".float()
> 554.20

পাশাপাশি বিন্দু সঙ্গে কাজ করে

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"

10
যদিও এটি বেস অবজেক্ট প্রোটোটাইপগুলি সংশোধন করতে খারাপ ফর্ম হিসাবে বিবেচিত হয়। যদি অন্য কাঠামোতেও এটি করার চেষ্টা করা হয় তবে কার্যকারিতা ভিন্ন হয়?
ফ্রেইকহেড

3

@GusDeCool বা অন্য কেউ একাধিক সহস্র বিভাজক, এক উপায় এটা করতে প্রতিস্থাপন করার প্রয়াসে একটি Regex বিশ্বব্যাপী প্রতিস্থাপন হল: /foo/g। কেবল মনে রাখবেন যে .এটি একটি মেটাচার্যাক্টর, সুতরাং আপনাকে এড়াতে হবে বা বন্ধনীতে ( \.বা [.]) রাখতে হবে। এখানে একটি বিকল্প রয়েছে:

var str = '6.000.000';
str.replace(/[.]/g,",");

1
হ্যাঁ, রেজেক্স ব্যতীত একটি প্রতিস্থাপন কেবলমাত্র চরিত্রের একটি ঘটনাকে প্রতিস্থাপন করে।
আউখান

2

আপনি এই ফাংশনটি ব্যবহার করতে পারেন। এটি '' দিয়ে কমাগুলি প্রতিস্থাপন করবে এবং তারপরে এটি মানটিকে পার্সফ্ল্যাট করবে এবং তারপরে এটি আবার কমাগুলিকে মান অনুসারে সামঞ্জস্য করবে।

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;
    }

0

আমার হাজার হাজার বিভাজক এবং দশমিক বিভাজক কী তা আগেই জানতাম না আমার একই সমস্যা ছিল। এটি করার জন্য আমি একটি লাইব্রেরি লেখা শেষ করেছি। আপনি যদি এটি আগ্রহী হন তবে তা এখানে: https://github.com/GuillaumeLeclerc/number-parsing


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