কীভাবে মুদ্রার স্ট্রিংটিকে jQuery বা জাভাস্ক্রিপ্ট দিয়ে ডাবল রূপান্তর করতে?


237

আমার কাছে একটি পাঠ্য বাক্স রয়েছে যাতে এতে মুদ্রার স্ট্রিং থাকবে যা তখন আমার কিছু স্ট্র্যাপটি সম্পাদন করতে সেই স্ট্রিংটিকে একটি ডাবল রূপান্তর করা দরকার to

"$1,100.00"1100.00

এটি সমস্ত ক্লায়েন্ট পক্ষের প্রয়োজন। আমার কোন উপায় নেই কিন্তু ত্যাগ করার মুদ্রা হিসেবে স্ট্রিং মুদ্রা ঢালাই ইনপুট কিন্তু প্রয়োজন স্ট্রিং / এটি একটি ডবল রূপান্তর কিছু গাণিতিক অপারেশন অনুমতি দেয়।

উত্তর:


480

সমস্ত বিন্দু / অঙ্কগুলি সরান:

var currency = "-$4,400.50";
var number = Number(currency.replace(/[^0-9.-]+/g,""));

4
দেখে মনে হচ্ছে এটি কেবল সেখানে কাজ করে যেখানে .00পিছন রয়েছে। অন্যথায় মুদ্রার বৈধ উপস্থাপনা যেমন "" $ 1100 "এবং" 1100 ডলার "। মাত্রার দুটি ক্রম দ্বারা হ্রাস করা হবে।
ব্রায়ান এম হান্ট

19
মনে রাখবেন যে এটি লোকেল-নির্ভর, যেমন অন্যান্য স্থানীয় লোকেরা দশমিকের জন্য ',' ব্যবহার করে (উদাঃ 1.100,00 €)। কিছু অন্যান্য লোকেল এমনকি প্রতি গ্রুপে পৃথক স্ট্যান্ডার্ড সংখ্যার সংখ্যা (যেমন 3 দশমিক) ব্যবহার করে।
স্মোলা

8
স্ট্রিংয়ে নেতিবাচক সংখ্যাগুলি পরিচালনা করতে, আমি গ্রহণযোগ্য অক্ষরের তালিকায় একটি '-' যুক্ত করেছি, যেমন .replace (/ [^ 0-9 - \।] + / G, "")
টনিক্ল্যাপল্যান্ড

4
এছাড়াও মনে রাখবেন যে কিছু অ্যাকাউন্টিং অ্যাপ্লিকেশনগুলি নেতিবাচক মানগুলি বোঝানোর জন্য বন্ধনীগুলিতে নম্বরগুলিকে মোড়ানো করে। যেমন: ($ 5.00) = - $ 5.00
ডেভ এল

1
আমি জানি আমি এখানে জবাব দিতে কয়েক বছর দেরি করতে পারি, তবে "মুদ্রা = 0" থাকলে আপনারও সতর্কতা অবলম্বন করা উচিত আপনি জাভাস্ক্রিপ্টের ত্রুটিটি পেয়ে বলবেন যে মুদ্রা.প্লেস কোনও কার্য নয়। আমি এড়াতে মুদ্রা = 0 হলে একটি সাধারণ চেক যুক্ত করেছি।
অ্যালেন

23

অ্যাকাউন্টিং.জেএস হ'ল উপায়। আমি এটি একটি প্রকল্পে ব্যবহার করেছি এবং এটি ব্যবহার করে খুব ভাল অভিজ্ঞতা পেয়েছি।

accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
accounting.unformat("€ 1.000.000,00", ","); // 1000000

আপনি এটি গিটহাবে খুঁজে পাবেন


6
আপডেট: এই লাইব্রেরিতে open১ টি মুক্ত সমস্যা রয়েছে এবং এটি 5 মাসে সম্পাদিত হয়নি, তাই আমি এটি বিশ্বাস করছি না। github.com/openexchangerates/accounting.js/issues
রায়ান

20

ফরমেটিং (ডলার এবং কমা) অপসারণ করতে একটি রেজেক্স ব্যবহার করুন এবং স্ট্রিংটিকে ভাসমান বিন্দুতে রূপান্তর করতে পার্সফ্লোট ব্যবহার করুন `

var currency = "$1,100.00";
currency.replace(/[$,]+/g,"");
var result = parseFloat(currency) + .05;

7
লক্ষণীয় যে আপনার মুদ্রা যুক্ত করার সময় কোনও 'টয়' অ্যাপ্লিকেশনগুলির জন্য ভাসা ব্যবহার করা উচিত নয়। আপনি সঠিক মোট না দিয়ে শেষ হবে ।
মিত্র

6
আপনি যখন অবাক হন এবং অসন্তুষ্ট হন যখন পার্সফ্লোট ("151.20" * 100) আপনাকে 15119.999999999998 দেয় তবে পার্সফ্লোট ("151.40" * 100) আপনাকে 15140 দেয় ever কখনও অর্থের জন্য পার্সফ্লোট ব্যবহার করবেন না। অর্থের সাথে লেনদেনের জন্য নির্দিষ্ট গ্রন্থাগারগুলি ব্যবহার করুন, যেমন অ্যাকাউন্টিং.জেএস বা এখানে প্রস্তাবিত অন্য যে কোনও একটি।
বামবেরি

15

আমি জানি এটি একটি পুরানো প্রশ্ন তবে একটি অতিরিক্ত বিকল্প দিতে চেয়েছিল।

JQuery গ্লোবালাইজ কোনও ফ্লোটে একটি সংস্কৃতি নির্দিষ্ট ফর্ম্যাট পার্স করার ক্ষমতা দেয়।

https://github.com/jquery/globalize

একটি স্ট্রিং "42 13,042.00" দেওয়া হয়েছে, এবং বিশ্বব্যাপী এন-ইউএসে সেট করুন:

Globalize.culture("en-US");

আপনি ভাসমান মানটি এমনভাবে পার্স করতে পারেন:

var result = Globalize.parseFloat(Globalize.format("$13,042.00", "c"));

এটি আপনাকে দেবে:

13042.00

এবং আপনাকে অন্যান্য সংস্কৃতির সাথে কাজ করার অনুমতি দেয়।


10

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে সিএমএসের উত্তরে মনে হচ্ছে একটি ছোট্ট ত্রুটি রয়েছে: এটি কেবল তখনই কাজ করে যদি মুদ্রার ফর্ম্যাট "ব্যবহার করে।" দশমিক বিভাজক হিসাবে উদাহরণস্বরূপ, যদি আপনাকে রাশিয়ান রুবেলগুলির সাথে কাজ করার প্রয়োজন হয় তবে স্ট্রিংটি এর মতো দেখাবে: "1 000,00 ঘষা"।

আমার সমাধান সিএমএসের তুলনায় অনেক কম মার্জিত, তবে এটি কৌশলটি করা উচিত।

var currency = "1 000,00 rub."; //it works for US-style currency strings as well
var cur_re = /\D*(\d+|\d.*?\d)(?:\D+(\d{2}))?\D*$/;
var parts = cur_re.exec(currency);
var number = parseFloat(parts[1].replace(/\D/,'')+'.'+(parts[2]?parts[2]:'00'));
console.log(number.toFixed(2));

অনুমিতি:

  • মুদ্রার মান দশমিক স্বীকৃতি ব্যবহার করে
  • স্ট্রিংয়ে এমন কোনও অঙ্ক নেই যা মুদ্রা মানের অংশ নয়
  • মুদ্রার মানতে এর ভগ্নাংশের অংশে 0 বা 2 অঙ্ক থাকে

রিজেক্সপ এমনকি "1,999 ডলার এবং 99 সেন্ট" এর মতো কিছু পরিচালনা করতে পারে যদিও এটি কোনও উদ্দেশ্যযুক্ত বৈশিষ্ট্য নয় এবং এটি নির্ভর করা উচিত নয়।

আশা করি এটি কারও সাহায্য করবে।


ধন্যবাদ. সর্বোত্তম উত্তর. সহজ এবং শক্তিশালী। আমি মুদ্রাটি পেতে এবং - সেন্টের জন্য (\ D *) (\ d। *? \ D) (?: \ D + (\ d {2} | -))? (\ D *) with দিয়ে এটি ব্যবহার করব। সুতরাং আপনি 1.000, - like এর মতো স্ট্রিংগুলিও পার্স করতে পারেন। মুদ্রা অংশগুলি [1] বা অংশে হবে [4] এবং অংশ [3] হিসাবে নম্বর হিসাবে সেন্ট অন্তর্ভুক্ত হবে বা -। আপনি চাইলে স্ট্রিংটি স্বাভাবিক করতে পারেন।
সাইবারএলিক্স

এটি খুবই খারাপ এবং বিপজ্জনক, এই তা বৃদ্ধি পায় সংখ্যার কম 10 100 তুলনায় আমি বোকার মত তখন তার সঙ্গে সমস্ত নম্বর পরীক্ষা পূর্বে ব্যবহৃত :(
sheavens

@ শ্যাভেনস এটির প্রতিবেদন করার জন্য ধন্যবাদ। এত দেরীতে এটি ঠিক করার জন্য ক্ষমা চাইলেও নতুন সংস্করণটি সেই পরিমাণগুলি জন্য আসলে কাজ করে।
ভিন্ডিকার


6

// "10.000.500,61 টিএল" দাম_তো_ সংখ্যা => 10000500.61

// "10000500.62" সংখ্যা_ টো_প্রাইস => 10.000.500,62

জেএস ফিডল: https://jsfiddle.net/Limitlessisa/oxhgd32c/

var price="10.000.500,61 TL";
document.getElementById("demo1").innerHTML = price_to_number(price);

var numberPrice="10000500.62";
document.getElementById("demo2").innerHTML = number_to_price(numberPrice);

function price_to_number(v){
    if(!v){return 0;}
    v=v.split('.').join('');
    v=v.split(',').join('.');
    return Number(v.replace(/[^0-9.]/g, ""));
}

function number_to_price(v){
    if(v==0){return '0,00';}
    v=parseFloat(v);
    v=v.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
    v=v.split('.').join('*').split(',').join('.').split('*').join(',');
    return v;
}

3

আমি জানি যে আপনি আপনার প্রশ্নের সমাধান পেয়েছেন, আমি কেবলমাত্র সুপারিশ করতে চেয়েছিলাম যে আপনি আন্তর্জাতিক সংখ্যা ফর্ম্যাটের জন্য নিম্নলিখিত আরও বিস্তৃত jQuery প্লাগইনটি দেখুন:

আন্তর্জাতিক নম্বর বিন্যাসক


3

এটি আমার কাজ। সমস্ত মুদ্রার সাথে কাজ করে ..

function toFloat(num) {
    dotPos = num.indexOf('.');
    commaPos = num.indexOf(',');

    if (dotPos < 0)
        dotPos = 0;

    if (commaPos < 0)
        commaPos = 0;

    if ((dotPos > commaPos) && dotPos)
        sep = dotPos;
    else {
        if ((commaPos > dotPos) && commaPos)
            sep = commaPos;
        else
            sep = false;
    }

    if (sep == false)
        return parseFloat(num.replace(/[^\d]/g, ""));

    return parseFloat(
        num.substr(0, sep).replace(/[^\d]/g, "") + '.' + 
        num.substr(sep+1, num.length).replace(/[^0-9]/, "")
    );

}

ব্যবহার: toFloat("$1,100.00")বাtoFloat("1,100.00$")




0
    $ 150.00
    Fr. 150.00
     689.00

আমি উপরের তিনটি মুদ্রার চিহ্নের জন্য পরীক্ষা করেছি You আপনি এটি অন্যদের জন্যও করতে পারেন।

    var price = Fr. 150.00;
    var priceFloat = price.replace(/[^\d\.]/g, '');

উপরের নিয়মিত প্রকাশটি হ'ল অঙ্ক বা সময় নয় এমন সমস্ত কিছুই মুছে ফেলবে o সুতরাং আপনি মুদ্রা চিহ্ন ছাড়া স্ট্রিংটি পেতে পারেন তবে "ফ্রিআর 150.00" এর ক্ষেত্রে যদি আপনি আউটপুটটির জন্য কনসোল করেন তবে আপনি দাম হিসাবে পাবেন

    console.log('priceFloat : '+priceFloat);

    output will be like  priceFloat : .150.00

যা ভুল তাই আপনি "এর সূচি পরীক্ষা করে দেখুন।" তারপরে এটি বিভক্ত করুন এবং সঠিক ফলাফল পান।

    if (priceFloat.indexOf('.') == 0) {
            priceFloat = parseFloat(priceFloat.split('.')[1]);
    }else{
            priceFloat = parseFloat(priceFloat);
    }

0
function NumberConvertToDecimal (number) {
    if (number == 0) {
       return '0.00'; 
    }
    number = parseFloat(number);
    number = number.toFixed(2).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1");
    number = number.split('.').join('*').split('*').join('.');
    return number;
}


0

এই ফাংশনটি লোকাল এবং মুদ্রার সেটিংস যে কোনও ক্ষেত্রেই কাজ করা উচিত:

function getNumPrice(price, decimalpoint) {
    var p = price.split(decimalpoint);
    for (var i=0;i<p.length;i++) p[i] = p[i].replace(/\D/g,'');
    return p.join('.');
}

এটি ধরে নিয়েছে যে আপনি দশমিক পয়েন্টের চরিত্রটি জানেন (আমার ক্ষেত্রে লোকেলটি পিএইচপি থেকে সেট করা আছে, তাই আমি এটি নিয়ে আসি <?php echo cms_function_to_get_decimal_point(); ?>)।


0

এটি আমার পক্ষে কাজ করেছে এবং বেশিরভাগ প্রান্তের বিষয়গুলি কভার করে :)

function toFloat(num) {
  const cleanStr = String(num).replace(/[^0-9.,]/g, '');
  let dotPos = cleanStr.indexOf('.');
  let commaPos = cleanStr.indexOf(',');

  if (dotPos < 0) dotPos = 0;

  if (commaPos < 0) commaPos = 0;

  const dotSplit = cleanStr.split('.');
  const commaSplit = cleanStr.split(',');

  const isDecimalDot = dotPos
    && (
      (commaPos && dotPos > commaPos)
      || (!commaPos && dotSplit[dotSplit.length - 1].length === 2)
    );

  const isDecimalComma = commaPos
    && (
      (dotPos && dotPos < commaPos)
      || (!dotPos && commaSplit[commaSplit.length - 1].length === 2)
    );

  let integerPart = cleanStr;
  let decimalPart = '0';
  if (isDecimalComma) {
    integerPart = commaSplit[0];
    decimalPart = commaSplit[1];
  }
  if (isDecimalDot) {
    integerPart = dotSplit[0];
    decimalPart = dotSplit[1];
  }

  return parseFloat(
    `${integerPart.replace(/[^0-9]/g, '')}.${decimalPart.replace(/[^0-9]/g, '')}`,
  );
}
toFloat('USD 1,500.00'); // 1500
toFloat('USD 1,500'); // 1500
toFloat('USD 500.00'); // 500
toFloat('USD 500'); // 500

toFloat('EUR 1.500,00'); // 1500
toFloat('EUR 1.500'); // 1500
toFloat('EUR 500,00'); // 500
toFloat('EUR 500'); // 500
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.