প্রতি তিন অঙ্কে সংখ্যায় কমা যুক্ত করুন


160

আমি কীভাবে jQuery ব্যবহার করে প্রতি তিন অঙ্কে কমা বিভাজক ব্যবহার করে সংখ্যার বিন্যাস করতে পারি?

উদাহরণ স্বরূপ:

╔═══════════╦═════════════╗
║   Input   ║   Output    ║
╠═══════════╬═════════════╣
║       298 ║         298 ║
║      2984 ║       2,984 ║
║ 297312984 ║ 297,312,984 ║
╚═══════════╩═════════════╝

আমি jQuery এ নতুন এবং একটি সাধারণ ফাংশন / প্লাগইন চাই যা প্রতি তিন ডিজিটের পরে মাত্র তিনটি অঙ্কের বেশি দীর্ঘ হলে কমা যুক্ত করে। কেবলমাত্র ইতিবাচক সংখ্যা, কোনও ভগ্নাংশ, দশমিক নয়, কোনও মুদ্রা জড়িত নেই, এবং মানক মার্কিন ফর্ম্যাট (1,111) নয় ($ 1,111 বা $ 1,111.11)। আমি বরং jQuery ব্যবহার করে করতাম এবং সম্ভব হলে জাভাস্ক্রিপ্ট না করে খুব সহজেই কোডটি কোনও ফাংশনে সেট করতাম যাতে এটি খুব সহজেই প্রয়োগ করা যায়। আমি কীভাবে এটি করতে যাব? সবার ইনপুট প্রশংসা করুন। আবার ধন্যবাদ.
স্টিভ 4

2
@ অজানা: আপনার কাছে ইতিমধ্যে অনেক উত্তর রয়েছে। আপনি যে উত্তর পেয়েছেন তা দেখুন এবং কোনটি আপনার পক্ষে সেরা তা দেখার জন্য তাদের মূল্যায়ন করুন। উত্তরগুলির একটির জন্য যদি আপনার আরও স্পষ্টতার প্রয়োজন হয় তবে সেই উত্তরের মন্তব্য হিসাবে পোস্ট করুন।
মার্ক বাইয়ার্স

1
দুঃখিত, আমার প্রশ্নটি যথেষ্ট সংক্ষিপ্ত হয়নি তবে উত্তরের জন্য পল ক্রেসি এর কোড ব্যবহার করে ডগ নিনার প্লাগইন ফর্ম্যাটটি দেখুন।
স্টিভ

উত্তর:


241

রিজেক্স হিসাবে পল ক্রেসিয়ের সহজ সমাধান ছিল, তবে এখানে এটি একটি সরল jQuery প্লাগইন হিসাবে রয়েছে:

$.fn.digits = function(){ 
    return this.each(function(){ 
        $(this).text( $(this).text().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") ); 
    })
}

আপনি এটির পরে এটি ব্যবহার করতে পারেন:

$("span.numbers").digits();

4
পুরোপুরি কাজ করে! সহজ, মার্জিত কোডের জন্য পল ক্রেসিকে ধন্যবাদ এবং ডগ নিনারকে প্লাগিন ফর্ম্যাটে রাখার জন্য ধন্যবাদ। উভয়কে Creditণ দেওয়া হয়েছে।
স্টিভ 4

4
আরসি @ মার্ক বাইয়ার্স সিনট্যাক্সটি সঠিক। '999.9999'.re place (/ (\ d)) (? = (\ D \ d \ d) + (?! \ D)) / g, "$ 1,")' 999.9,999 'যদিও ফেরত দেয়।
bendewey

6
ইনপুট ক্ষেত্রগুলির জন্য একটি সামান্য মোড তৈরি করেছেন:$.fn.digits = function(){ return this.each(function(){ $(this).val( $(this).val().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,") ); }) }
এমপিএমবার্ন

3
আমি এই ভাল একটি jQuery নাম-ব্যবধানযুক্ত ইউটিলিটি শৈলী ফাংশন, যেমন উপযুক্ত হবে মনে $.digits = function() { ... };
অ্যালেক্স

63
দ্রুততম number.toLocaleString("en");
উপায়টি

95

আপনি ব্যবহার করতে পারেন Number.toLocaleString():

var number = 1557564534;
document.body.innerHTML = number.toLocaleString();
// 1,557,564,534


আমি চেষ্টা করেছি, তবে লাইভ সার্ভারে কাজ করে নয়, লোকালহোস্টে কাজ করছি ..
আবেদ পুত্র

1
সকল ব্রাউজারে @ ইল্ডসিলভার w3schools.com/jsref/jsref_tolocalestring.asp
রিক্স

এটি আমার পক্ষে সবচেয়ে সহজ কাজ করেছে। আমার মুদ্রা এবং কমা দরকার ছিল। আমি বৈশিষ্ট্যগুলিও সেট করতে সক্ষম হয়েছি: var n = 26787.89 var myObjCurrency = { style: "currency", currency: "USD", currencyDisplay : "symbol" } n.toLocaleString("en-US", myObjCurrency));
এডাব্লুপি

78

এরকম কিছু যদি আপনি রেইজেক্সে থাকেন তবে প্রতিস্থাপনের জন্য সঠিক বাক্য গঠন সম্পর্কে নিশ্চিত নন!

MyNumberAsString.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");

2
বাক্য গঠন ঠিক আছে। '999.9999'.re place (/ (\ d)) (? = (\ D \ d \ d) + (?! \ D)) / g, "$ 1,")' 999.9,999 'যদিও ফেরত দেয়।
মার্ক বাইয়ার্স

@ অজানা, আমি এটিকে একটি উত্তরে সরিয়েছি। ব্যবহারের উদাহরণ সহ এটি এই পৃষ্ঠায় আরও নিচে রয়েছে।
ডগ নিনার

27

আপনি নাম্বার ফর্ম্যাটার চেষ্টা করতে পারেন

$(this).format({format:"#,###.00", locale:"us"});

এটি অবশ্যই মার্কিন যুক্তরাষ্ট্র সহ বিভিন্ন লোকেল সমর্থন করে।

এটি কীভাবে ব্যবহার করা যায় তার একটি খুব সরল উদাহরণ এখানে:

<html>
    <head>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript" src="jquery.numberformatter.js"></script>
        <script>
        $(document).ready(function() {
            $(".numbers").each(function() {
                $(this).format({format:"#,###", locale:"us"});
            });
        });
        </script>
    </head>
    <body>
        <div class="numbers">1000</div>
        <div class="numbers">2000000</div>
    </body>
</html>

আউটপুট:

1,000
2,000,000

আমি এই প্লাগইনটি এবং লেখকের বিবরণ থেকে এক ঝলক দেখেছি, এটি ফর্ম ইনপুট ক্ষেত্রে ব্যবহৃত হতে বোঝানো হয়েছিল। <স্প্যান ক্লাস = "সংখ্যা"> 2984 </span> এ প্রয়োগ করার জন্য আমি কীভাবে এটি গ্রহণ করতে পারি তাই এটি দশমিক ছাড়াই <span class = "number"> 2,984 </span> এ ফর্ম্যাট হয়। আমি চেষ্টা করেছি $ ('span.numbers')। ফর্ম্যাট ({ফর্ম্যাট: "#, ###", লোকেল: "আমাদের"}); তবে কিছুই হ'ল না। তবুও প্লাগিন পরীক্ষা করছে, এটির সাথে চারপাশে খেলছে। দুঃখিত আমি একজন jQuery নবাগত :-)
স্টিভ

এই প্লাগইনটি সম্পর্কে জানতে +1 দুর্দান্ত। আমি সম্মত হই যে বৃদ্ধি এবং ভবিষ্যতের আন্তর্জাতিকীকরণের জন্য, এটি অনুসরণ করার সর্বোত্তম পথ হবে।
ডগ নিনার

এটির গিটহাব রেপোর লিঙ্কটি এখানে। github.com/hardhub/jquery-numberformatter
Mwangi Thiga

22

এটি jQuery নয়, তবে এটি আমার পক্ষে কাজ করে। এই সাইট থেকে নেওয়া হয়েছে ।

function addCommas(nStr) {
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}

1
আপনার খুব "শিকড়" :)
MonoThreaded

"রুটসি" এটি হতে পারে তবে আমি মনে করি না যে অন্যান্য অভিনব প্যান্টের পদ্ধতিগুলি আমার পরিস্থিতিতে কাজ করবে, যেখানে ডেটাটি ক্যানভাসে (চার্ট.জেএস) এম্বেড করা আছে। তবে সেই ফাংশনটি যুক্ত করা এবং এটিকে চার্টের পরের ড্রা () ইভেন্টে কল করা পুরোপুরি কাজ করে: ctx.fillText (অ্যাডকমাস (ডেটাসেট.ডাটা [i]),
বি ক্লে শ্যানন

এটি উদাহরণস্বরূপ 3000000 (7 ডিজিট) এর জন্য কাজ করে না। শুধুমাত্র 6 এবং কম সংখ্যার জন্য!
মোস্তফা নোরজাদে

21

ফাংশন নম্বর ব্যবহার করুন ();

$(function() {

  var price1 = 1000;
  var price2 = 500000;
  var price3 = 15245000;

  $("span#s1").html(Number(price1).toLocaleString('en'));
  $("span#s2").html(Number(price2).toLocaleString('en'));
  $("span#s3").html(Number(price3).toLocaleString('en'));

  console.log(Number(price).toLocaleString('en'));

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<span id="s1"></span><br />
<span id="s2"></span><br />
<span id="s3"></span><br />


ধন্যবাদ, আমি আপনার উত্তর ব্যবহার করেছি। এটি লক্ষণীয় যে এটি কেবল দৈর্ঘ্যে 15 ডিজিট পর্যন্ত সংখ্যাগুলিকে সমর্থন করে।
টলপল

21

2016 উত্তর:

জাভাস্ক্রিপ্টের এই ফাংশন রয়েছে, তাই জ্যাকুরির কোনও প্রয়োজন নেই।

yournumber.toLocaleString("en");

2
এটি কি সমস্ত ব্রাউজারে কাজ করবে? এটি ক্রোমের উপর দুর্দান্ত কাজ করছে। এটি কি আই 9 + ও অপেরা, সাফারি তে কাজ করবে?
জেপেলিন

@zeppelin w3schools.com/jsref/jsref_tolocalestring.asp সমস্ত ব্রাউজার সমর্থন করে
রিক্স

1
কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি যে নম্বরটিতে কল করেছেন সেটি হ'ল একটি সংখ্যার (ইনট, ফ্লোট ইত্যাদি)) স্ট্রিং নয়।
el3ati2

16

আরও একটি গভীর সমাধান

এর মূলটি হ'ল replaceকল। এখনও অবধি, আমি মনে করি না প্রস্তাবিত সমাধানগুলির মধ্যে নিম্নোক্ত সমস্তগুলিই পরিচালনা করে:

  • পূর্ণসংখ্যার: 1000 => '1,000'
  • স্ট্রিংস: '1000' => '1,000'
  • স্ট্রিংগুলির জন্য:
    • দশমিকের পরে শূন্যগুলি সংরক্ষণ করে: 10000.00 => '10,000.00'
    • দশমিকের আগে নেতৃস্থানীয় শূন্যগুলি ত্যাগ করে: '01000.00 => '1,000.00'
    • দশমিকের পরে কমা যোগ করবেন না: '1000.00000' => '1,000.00000'
    • নেতৃস্থানীয় -বা সংরক্ষণ করে +:'-1000.0000' => '-1,000.000'
    • অ-সংখ্যাযুক্ত স্ট্রিংগুলি রিটার্ন, আনমডিমিটেড: '1000k' => '1000k'

নিম্নলিখিত ফাংশন উপরের সমস্ত করে।

addCommas = function(input){
  // If the regex doesn't match, `replace` returns the string unmodified
  return (input.toString()).replace(
    // Each parentheses group (or 'capture') in this regex becomes an argument 
    // to the function; in this case, every argument after 'match'
    /^([-+]?)(0?)(\d+)(.?)(\d+)$/g, function(match, sign, zeros, before, decimal, after) {

      // Less obtrusive than adding 'reverse' method on all strings
      var reverseString = function(string) { return string.split('').reverse().join(''); };

      // Insert commas every three characters from the right
      var insertCommas  = function(string) { 

        // Reverse, because it's easier to do things from the left
        var reversed           = reverseString(string);

        // Add commas every three characters
        var reversedWithCommas = reversed.match(/.{1,3}/g).join(',');

        // Reverse again (back to normal)
        return reverseString(reversedWithCommas);
      };

      // If there was no decimal, the last capture grabs the final digit, so
      // we have to put it back together with the 'before' substring
      return sign + (decimal ? insertCommas(before) + decimal + after : insertCommas(before + after));
    }
  );
};

আপনি এটি এর মতো একটি jQuery প্লাগইনে ব্যবহার করতে পারেন:

$.fn.addCommas = function() {
  $(this).each(function(){
    $(this).text(addCommas($(this).text()));
  });
};

9

আপনি jquery ফর্ম্যাট কারুকেন্সি প্লাগইনটি দেখতে পারেন (যার মধ্যে আমি লেখক); এটিতে একাধিক লোকেলেরও সমর্থন রয়েছে, তবে আপনার প্রয়োজন নেই এমন মুদ্রা সহায়তার ওভারহেড থাকতে পারে।

$(this).formatCurrency({ symbol: '', roundToDecimalPlace: 0 });

4
এই প্রশ্নটি আমাকে এই প্লাগইনের v1.3 প্রকাশ করতে পরিবর্তিত করেছে, তাই ধন্যবাদ
বেন্ডিউই

3

এখানে আমার জাভাস্ক্রিপ্ট, কেবল ফায়ারফক্স এবং ক্রোমে পরীক্ষিত

<html>
<header>
<script>
    function addCommas(str){
        return str.replace(/^0+/, '').replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    }

    function test(){
        var val = document.getElementById('test').value;
        document.getElementById('test').value = addCommas(val);
    }
</script>
</header>
<body>
<input id="test" onkeyup="test();">
</body>
</html>


1
function formatNumberCapture () {
$('#input_id').on('keyup', function () {
    $(this).val(function(index, value) {
        return value
            .replace(/\D/g, "")
            .replace(/\B(?=(\d{3})+(?!\d))/g, ",")
            ;
    });
});

আপনি এটি চেষ্টা করতে পারেন, এটি আমার পক্ষে কাজ করে

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