জাভাস্ক্রিপ্টে দুটি দশমিক স্থান সহ ফ্লোটকে কীভাবে পার্স করবেন?


410

আমার কাছে নিম্নলিখিত কোড রয়েছে। আমি এটি এমনটি করতে চাই যে যদি দাম_পরিচয়টি একটি পূর্ণসংখ্যার সমান হয়, তবে 10 বলে নেওয়া যাক, তবে আমি দুটি দশমিক স্থান যুক্ত করতে চাই। সুতরাং 10 হবে 10.00। অথবা এটি 10.6 এর সমান হলে 10.60 হবে be এটি কীভাবে করবেন তা নিশ্চিত নন।

price_result = parseFloat(test_var.split('$')[1].slice(0,-1));

উত্তর:


914

আপনি ব্যবহার করতে পারেন toFixed () যে কাজ করতে

var twoPlacedFloat = parseFloat(yourString).toFixed(2)

1
সাহায্য করতে এবং ভাল কাজটি চালিয়ে যেতে পেরে আনন্দিত - "প্রতিদিন একটি নতুন জিনিস শেখা"
মহেশ ভেলাগা

3
টু ফিক্সড যদিও বেশ বগি। এছাড়াও, এখানে
ডাব্লু 3 স্কুল স্কুল

125
তবে টু ফিক্সড () সংখ্যাকে স্ট্রিং হিসাবে ফিরিয়ে দেয়, আপনি যদি সংখ্যার তুলনা করেন, আপনাকে আবার পার্সফ্লোট ব্যবহার করতে হবে।
পেড্রো মুনিজ

19
var twoPlacedFloat = + parseFloat(yourString).toFixed(2)ফ্লোটে রূপান্তর করতে ব্যবহার করুন
জোসে রুই সান্টোস

13
স্ট্রিংয়ের পরিবর্তে একটি সংখ্যা পেতে পেরেনস যুক্ত করুন: পার্সফ্লোট ((আপনার স্ট্রিং)। টু ফিক্সড (2));
pvanallen

50

আপনি যখন ব্যবহার করবেন toFixed, এটি সর্বদা মানটিকে স্ট্রিং হিসাবে ফিরিয়ে দেয়। এটি কখনও কখনও কোড জটিল করে তোলে। এটি এড়াতে, আপনি সংখ্যার জন্য একটি বিকল্প পদ্ধতি তৈরি করতে পারেন।

Number.prototype.round = function(p) {
  p = p || 10;
  return parseFloat( this.toFixed(p) );
};

আর ব্যবহার করুন:

var n = 22 / 7; // 3.142857142857143
n.round(3); // 3.143

বা সহজভাবে:

(22/7).round(3); // 3.143

আমি একটি শপিং কার্ট প্রোগ্রাম লিখেছি এবং পার্সফ্লোট () পদ্ধতিতে শৃঙ্খলিত টু ফিক্সড () এবং রাউন্ড () পদ্ধতিগুলি ব্যবহার করার চেষ্টা করেছি। এই পদ্ধতির কোনওটিই পার্সফ্লোট () দিয়ে কাজ করেনি।
ক্রিস 22

এটি আমাকে কিছুটা মাথা ব্যথা থেকে বাঁচিয়েছে। কেবল এটির জন্য +1। আমার ধারণা ছিল না এটি সংখ্যাগুলিকে স্ট্রিংয়ে পরিণত করবে।
লুকাশ

ParseFloat না যদি @Lukas, তাই নয় কি
Vlada

আমি '২.০০' নাম্বারে আবেদন করলে এটি 2 টি প্রত্যাবর্তন করে
সৌরিন দশাদিয়া

এই পদ্ধতিটি সংশোধনের জন্য, বিন্যাসের জন্য নয়। উদাহরণস্বরূপ: 0.1 + 0.2 // 0.30000000000000004সুতরাং এর জন্য আমার সংশোধন দরকার(0.1+0.2).round() // 0.3
ভ্লাদা

47

আপনার যদি পারফরম্যান্সের প্রয়োজন হয় (গেমসের মতো):

Math.round(number * 100) / 100

এটি পার্সফ্লোট (সংখ্যা. টু ফিক্সড (2)) হিসাবে প্রায় 100 গুণ দ্রুত

http://jsperf.com/parsefloat-tofixed-vs-math-round


5
উপরের সূত্রে '২.০০' রিটার্ন ২. তবে আমি এটি ২.০০ হতে চাই।
সৌরিন দশাদিয়া

5
আপনি এটি উভয় উপায়ে থাকতে পারে না। আপনি যদি আউটপুটটি স্ট্রিংয়ের পরিবর্তে একটি সংখ্যা হতে চান তবে আপনি পিছনের শূন্য পাবেন না। সুতরাং আপনি উপরের রূপান্তরকে স্ট্রিংয়ে ব্যবহার করতে পারেন: var twoPusedFloat = (ম্যাথ.উন্ড (2.002745 * 100) / 100)। টু ফিক্সড (2);
pvanallen

3
আমি যদি 100 এর পরিবর্তন 200 করে করি তবে কি গতি বাড়বে?
এলাশো

যদি ভাসমান পয়েন্ট অপারেশনগুলির সংখ্যা একই থাকে তবে গতি একই হবে, তাই না
রব বোর্ম্যান

কেন number * 1আমি সাধারণ কিছু অনুভব করছি maybe?
ncubica

11

একটি সংখ্যা ফিরে পেতে, বন্ধনীগুলির অন্য একটি স্তর যুক্ত করুন। পরিষ্কার রাখে

var twoPlacedFloat = parseFloat((10.02745).toFixed(2));

2
আপনি কি আপনার সূত্রে কিছু মিস করছেন? var twoPlacedFloat = parseFloat(('2.00').toFixed(2))ত্রুটি উত্পন্ন।
সৌরিন দশাদিয়া

দুঃখিত, একটি সংখ্যার পরিবর্তে একটি স্ট্রিং ভেরিয়েবল ছিল, যা টু ফিক্সড () প্রয়োজন - এখন ঠিক করা হয়েছে। তবে ম্যাথ.গ্রাউন্ড ব্যবহার করে রবের উত্তরটি পারফরম্যান্সের দিক থেকে বিবেচনা করার মতো।
pvanallen

এটি ভ্লাদার উত্তরের একটি মন্তব্য হওয়া উচিত।
রড্রিরোকর

5

যদি আপনার উদ্দেশ্যটি বিশ্লেষণ করা হয়, এবং আপনার ইনপুটটি আক্ষরিক হতে পারে তবে আপনি এটির একটি প্রত্যাশা করতেন floatএবং এটি সরবরাহ toFixedকরবেন না, সুতরাং এটি সরবরাহ করার জন্য দুটি সাধারণ ফাংশন এখানে দেওয়া হল:

function parseFloat2Decimals(value) {
    return parseFloat(parseFloat(value).toFixed(2));
}

function parseFloat2Decimals(value,decimalPlaces) {
    return parseFloat(parseFloat(value).toFixed(decimalPlaces));
}

2
এটি espected হিসাবে কাজ করে না। parseFloat(parseFloat('10.5').toFixed(2))প্রত্যাবর্তন 10.5espected 10.50। এছাড়াও parseFloat(parseFloat('10.50').toFixed(2))ফিরে 10.5
এমটিকে

এটি যদিও ভাসমান, সুতরাং 10.5 সমান 10.50
সেভেজ

আমি জানি যে 10.5 == 10.50 তবে আমার ক্লায়েন্টে মুদ্রণ করা দরকার 10.50 নয় 10.5
এমটিকে

2

লোডাশ থেকে সিল সম্ভবত সেরা

_.ceil("315.9250488",2) 
_.ceil(315.9250488,2) 
_.ceil(undefined,2)
_.ceil(null,2)
_.ceil("",2)

একটি সংখ্যা নিয়েও কাজ করবে এবং এটি নিরাপদ


1
ল্যাড্যাশ ব্যবহার করা সম্ভব হলে উত্তর, আমি বর্তমানে আন্ডারস্কোর.জেএস ব্যবহার করছি এবং বর্তমানে ১.৯.১-এ একইরকম ফাংশন নেই।
রডিরিরোকর

1

@ এসডি সংক্ষিপ্ত উত্তর: দশমিকের পরে পিছনে শূন্যের সাথে নম্বর ডাটাটাইপ মান কোনও উপায় নেই।

দীর্ঘ উত্তর: স্ট্রিং ফিরিয়ে দেওয়ার জন্য এটি জাভাস্ক্রিপ্টের সম্পত্তি toFixedবা toPrecisionফাংশন। এর কারণ হ'ল নম্বরের ডেটাটাইপের মান = 2.00 এর মতো হতে পারে না, এটি সর্বদা দশমিকের পরে অনুসরণকারী শূন্যগুলি সরিয়ে ফেলবে, এটি সংখ্যা ডেটাটাইপের অন্তর্নির্মিত সম্পত্তি। সুতরাং জেএস উপরোক্ত অর্জন করতে আমাদের কাছে 2 টি বিকল্প রয়েছে

  1. হয় স্ট্রিং হিসাবে ডেটা ব্যবহার করুন বা
  2. প্রাক্তন 2.50 -> 2.5 এর শেষে কেস '0' দিয়ে কাটা মান হিসাবে সম্মত হন। দশমিকের পরে সংখ্যার পিছনে জিরো থাকতে পারে না

0

আপনি যদি গোলটি বন্ধ করতে না চান তবে দয়া করে নীচের ফাংশনটি ব্যবহার করুন।

function ConvertToDecimal(num) {
    num = num.toString(); //If it's not already a String
    num = num.slice(0, (num.indexOf(".")) + 3); //With 3 exposing the hundredths place
   alert('M : ' +  Number(num)); //If you need it back as a Number    
}

0

এটির মূল্য কীসের জন্য: একটি দশমিক সংখ্যা, একটি দশমিক সংখ্যা, আপনি এটি অন্য কোনও মানতে গোল করেন বা না করেন। অভ্যন্তরীণভাবে, এটি ভাসমান পয়েন্ট আর্থোমেটিক এবং হ্যান্ডলিংয়ের নিয়ম অনুসারে দশমিক ভগ্নাংশ আনুমানিক। এটি অভ্যন্তরীণভাবে দশমিক সংখ্যা (ভাসমান পয়েন্ট, জেএসে একটি ডাবল) থাকে, আপনি যতগুলি অঙ্কই এটির সাথে প্রদর্শন করতে চান তা বিবেচ্য নয়।

এটি প্রদর্শনের জন্য উপস্থাপন করার জন্য, আপনি স্ট্রিং রূপান্তর দ্বারা যা খুশি তাতে ডিসপ্লেটির যথার্থতা চয়ন করতে পারেন। উপস্থাপনা কোনও প্রদর্শন সমস্যা, কোনও স্টোরেজ জিনিস নয়।


0

আপনি ভাসমান মান 2 অঙ্কের জন্য .toFixed () ব্যবহার করতে পারেন

Exampale

let newValue = parseFloat(9.990000).toFixed(2)

//output
9.99

-1

এটি চেষ্টা করুন (কোডে মন্তব্য দেখুন):

function fixInteger(el) {
    // this is element's value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseInt(value);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseInt(value);
    }
    // apply new value to element
    $(el).val(newValue);
}

function fixPrice(el) {
    // this is element's value selector, you should use your own
    value = $(el).val();
    if (value == '') {
        value = 0;
    }
    newValue = parseFloat(value.replace(',', '.')).toFixed(2);
    // if new value is Nan (when input is a string with no integers in it)
    if (isNaN(newValue)) {
        value = 0;
        newValue = parseFloat(value).toFixed(2);
    }
    // apply new value to element
    $(el).val(newValue);
}

-1

সহজ জাভাস্ক্রিপ্ট, ভাসমান স্ট্রিং:

var it_price = chief_double($("#ContentPlaceHolder1_txt_it_price").val());

function chief_double(num){
    var n = parseFloat(num);
    if (isNaN(n)) {
        return "0";
    }
    else {
        return parseFloat(num);
    }
}


-2
Solution for FormArray controllers 

ফর্মআরে ফর্ম নির্মাতা সূচনা করুন

  formInitilize() {
    this.Form = this._formBuilder.group({
      formArray: this._formBuilder.array([this.createForm()])
    });
  }

ফর্ম তৈরি করুন

  createForm() {
    return (this.Form = this._formBuilder.group({
      convertodecimal: ['']
    }));
  }

ফর্ম নিয়ামক মধ্যে ফর্ম মান সেট করুন

  setFormvalues() {
    this.Form.setControl('formArray', this._formBuilder.array([]));
    const control = <FormArray>this.resourceBalanceForm.controls['formArray'];
    this.ListArrayValues.forEach((x) => {
      control.push(this.buildForm(x));
    });
  }

  private buildForm(x): FormGroup {
    const bindvalues= this._formBuilder.group({
      convertodecimal: x.ArrayCollection1? parseFloat(x.ArrayCollection1[0].name).toFixed(2) : '' // Option for array collection
// convertodecimal: x.number.toFixed(2)    --- option for two decimal value 
    });

    return bindvalues;
  }

-3

আমি অন্য সমাধান পেয়েছি।

round()পরিবর্তে আপনি এটি করতে ব্যবহার করতে পারেনtoFixed()

var twoPlacedFloat = parseFloat(yourString).round(2)

7
@ অস্টিনহেনলি আমি বৃত্তাকার () ব্যবহার করার চেষ্টা করেছি এবং এটি কার্যকর হয়নি। এ কারণেই সম্ভবত মানুষ ভোট দিচ্ছেন। তিনি ম্যাথ.উইন্ড ()
নাথন

@ নাথান এটি ইনলাইন ব্যবহার করা দরকার, parseFloat()আমি @ জেসালজব্যাঙ্কের উত্তর আপডেট করার পরে
অ্যালাস্টার

3
না, এটি কাজ করে না। আপনি ম্যাথ.াউন্ড (পার্সফ্লোট (আপনার স্ট্রিং), 2) চেষ্টা করতে পারেন;
অগি গার্ডনার 21

1
এমন কোনও উত্তরকে কেন কার্যকর করবে না যা কখনই কার্যকর হবে না? round()জেএস সংখ্যার মতো কোনও পদ্ধতি নেই method আসল প্রশ্ন হ'ল কে এটিকে উজ্জীবিত করেছে।
meandre
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.