জাভাস্ক্রিপ্টে হাজার হাজার বিভাজক হিসাবে কমা দিয়ে কোনও নম্বর কীভাবে প্রিন্ট করা যায়


1779

আমি জাভা স্ক্রিপ্টে হাজার হাজার বিভাজক হিসাবে কমা দিয়ে একটি পূর্ণসংখ্যা মুদ্রণের চেষ্টা করছি । উদাহরণস্বরূপ, আমি 1234567 নম্বরটি "1,234,567" হিসাবে দেখাতে চাই। আমি কীভাবে এটি করতে যাব?

এখানে আমি এটি কীভাবে করছি:

function numberWithCommas(x) {
    x = x.toString();
    var pattern = /(-?\d+)(\d{3})/;
    while (pattern.test(x))
        x = x.replace(pattern, "$1,$2");
    return x;
}

এটি করার কোনও সহজ বা আরও মার্জিত উপায় আছে? এটি ভাসমানদের সাথেও কাজ করলে এটি চমৎকার হবে, তবে এটি প্রয়োজনীয় নয়। পিরিয়ড এবং কমাগুলির মধ্যে সিদ্ধান্ত নেওয়ার জন্য এটি স্থানীয়-নির্দিষ্ট হওয়ার দরকার নেই।


156
সংখ্যা (x) .toLocaleString ()
বোফিন

@ বফিন এটি ইনপুট টাইপ সংখ্যার (কমা হিসাবে) কাজ করছে না - স্বীকৃত উত্তরে আমরা কমা প্রতিস্থাপন করতে পারি বিন্দুতে এবং ইনপুট ধরণের সংখ্যাটি কাজ করবে
ভাইটালি জেডনেভিচ

48
2016 সালে সাফারি তে Number.prototype.toLocaleString এখনও কাজ করে না তা লক্ষণীয় । আসলে সংখ্যাটি ফর্ম্যাট করার পরিবর্তে এটি কেবল এটি ফিরিয়ে দেয়, কোনও ত্রুটি নিক্ষেপ করা হয় না। তার ফলস্বরূপ আজকের সবচেয়ে বড় ফেসপামটি হ'ল ... #
গুডওয়ার্ক

তবে এটি আইওএস সাফারিটিতে কাজ করে বলে মনে হচ্ছে।
টিম

toLocaleString অসঙ্গত এবং এটি ব্যবহার করা উচিত নয়। উদাহরণস্বরূপ - ফায়ারফক্সে এটি 1,234 ফিরে আসবে তবে আইইতে এটি দশমিক যোগ করবে: 1,234.00
বোর্ট

উত্তর:


2828

আমি কেরির উত্তরটি থেকে ধারণাটি ব্যবহার করেছি, তবে এটিকে সহজ করে দিয়েছি যেহেতু আমি কেবলমাত্র আমার নির্দিষ্ট উদ্দেশ্যে সাধারণ কিছু সন্ধান করছি। আমি যা করেছি তা এখানে:

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}


রেজেক্স 2 লকহেড আসক্তি ব্যবহার করে:

  • স্ট্রিংয়ের যে কোনও পয়েন্টের জন্য পর পর তিনটি সংখ্যার একাধিক সংখ্যার সন্ধান করা ইতিবাচক,
  • এই পয়েন্টটিতে ঠিক তিনটি সংখ্যার একাধিক রয়েছে তা নিশ্চিত করার জন্য একটি নেতিবাচক দৃser়তা। প্রতিস্থাপনের অভিব্যক্তিটি সেখানে কমা রাখে।

উদাহরণস্বরূপ, আপনি যদি এটি পাস করেন 123456789.01তবে ইতিবাচক দৃ as়তা 7 এর বামে প্রতিটি স্পটের সাথে মিলবে (যেহেতু 7893 ডিজিটের 678একাধিক, 3 ডিজিটের একাধিক 567, ইত্যাদি)। Negativeণাত্মক দাবিটি যাচাই করে যে 3 টি সংখ্যার একাধিকটির পরে কোনও অঙ্ক নেই। 789এর পরে একটি পিরিয়ড রয়েছে তাই এটি 3 ডিজিটের একাধিক, তাই কমা সেখানে চলে। 6783 টি সংখ্যার একাধিক তবে এর 9পরে এটি রয়েছে, সুতরাং 3 টি সংখ্যা 4 টির একটি দলের অংশ, এবং কমা সেখানে যায় না। একইভাবে 5674567896 টি সংখ্যা, যা 3 এর একাধিক, সুতরাং একটি কমা আগে চলে যায়। 3456783 এর একাধিক, তবে এটির 9পরে রয়েছে, তাই কোনও কমা সেখানে যায় না। ইত্যাদি। দ্য\B স্ট্রিংয়ের শুরুতে কমেমা লাগানো থেকে রেজিটকে রাখে।

@ নিউ-রাহ উল্লেখ করেছেন যে দশমিক পয়েন্টের পরে যদি 3 টির বেশি সংখ্যা থাকে তবে এই ফাংশনটি অনাকাঙ্ক্ষিত জায়গায় কমা যুক্ত করে adds যদি এটি সমস্যা হয় তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন:

function numberWithCommas(x) {
    var parts = x.toString().split(".");
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    return parts.join(".");
}

@ টিজক্রাউডার উল্লেখ করেছেন যে এখন জাভাস্ক্রিপ্টটির নজরদারি ( সমর্থন তথ্য ) রয়েছে, এটি নিয়মিত প্রকাশে নিজেই সমাধান করা যেতে পারে:

function numberWithCommas(x) {
    return x.toString().replace(/\B(?<!\.\d*)(?=(\d{3})+(?!\d))/g, ",");
}

(?<!\.\d*)নেতিবাচক চেহারা যা বলছে যে .শূন্য বা তার বেশি সংখ্যার পরে ম্যাচটি করা যাবে না । নেতিবাচক চেহারাটি হ'ল কমপক্ষে ভি 8-তে splitএবং joinসমাধান ( তুলনা ) এর চেয়ে দ্রুত ।


21
খুব দুর্দান্ত, লক্ষ্য করেছেন যে এটির দশমিক পয়েন্টের পরেও 3 টিরও বেশি সংখ্যক সংখ্যক সমস্যা রয়েছে।
এরিক পেট্রোলেজে

60
সংখ্যা চেষ্টা করুন উইথকমাস (12345.6789) -> "12,345.6,789" আমি এটি পছন্দ করি না
নিউ-রাহ

4
ভগ্নাংশের সাথে এটি ভালভাবে কাজ করে না, দশমিক পয়েন্টের পরে আমরা কমা চাই না
মুগেন

30
'এর পরে ঠিক করা ছোট্ট উন্নতি। সমস্যা '123456789.01234'.replace (/ \ B (? = (? = (= d * \।।)) (\ d {3}) + (?! (_ g d)) / জি,' _ ')
দিমিত্রিজ গোলুবেব

8
@ দিমিত্রিজ গোলুবেভ পূর্ণসংখ্যার জন্য কাজ করে না। সম্ভবত দশমিক পয়েন্ট বাধ্যতামূলক সমাধান হবে।
ভ্লাদ

1807

আমি অবাক হয়েছি কেউই নাম্বার.প্রোটোটাইপ.টোকলোকস্ট্রিংয়ের উল্লেখ করেনি । এটি জাভাস্ক্রিপ্ট 1.5 তে প্রয়োগ করা হয়েছে (যা 1999 সালে প্রবর্তিত হয়েছিল) তাই এটি মূলত সমস্ত বড় ব্রাউজারে সমর্থিত।

var n = 34523453.345
n.toLocaleString()
"34,523,453.345"

এছাড়া অন্তর্ভুক্তি মাধ্যমে v0.12 হিসাবে Node.js কাজ করে তথ্যের

কেবল মনোযোগ দিন যে এই ফাংশনটি একটি সংখ্যা দেয় না, স্ট্রিং দেয় returns

আপনি যদি কিছু আলাদা চান তবে অঙ্ক.জগুলি আকর্ষণীয় হতে পারে।


17
@ সিসিগ্রিস্ট ভাল পয়েন্ট তবে এটি যতটা খারাপ তা মনে হচ্ছে না। গতি ব্রাউজার নির্ভর। এফএফ বা অপেরাতে এটি ভাল অভিনয় করে। যদিও আমি ক্রোমে চুষছি। জিরো হিসাবে: var number = 123456.000; number.toLocaleString('en-US', {minimumFractionDigits: 2}); "123,456.00"এই বিকল্পগুলি যদিও এফএফ বা সাফারি তে কাজ করে না।
uKolka

22
পারফরম্যান্সের উপর নির্ভর করে পারফরম্যান্সের পার্থক্যটি কোনও সমস্যা হতে পারে বা নাও হতে পারে। যদি 1000 ফলাফলের দৈত্য টেবিলের জন্য ব্যবহার করা হয় তবে এটি আরও গুরুত্বপূর্ণ হবে তবে যদি কেবলমাত্র একটি মানের জন্য ব্যবহার করা হয় তবে পার্থক্যটি নগন্য। তবে সুবিধাটি হ'ল এটি স্থানীয়-সচেতন, সুতরাং ইউরোপের কেউ 34.523.453,345 বা 3433 453,345 দেখতে পাবে । এটি অনেক দেশ থেকে দর্শকদের নিয়ে কোনও সাইটে আরও গুরুত্বপূর্ণ হবে।
টি

6
অসাধারণ. শেষ পর্যন্ত দেশীয় ফাংশন সহ একটি উত্তর। এবং আরও কী, এটি পৃথক পৃথক পৃথক পৃথক দেশে সঠিকভাবে প্রদর্শিত হয় (চেক প্রজাতন্ত্রে আমরা লিখি X XXX XXX,YYY)।
টোমা জ্যাটো - মনিকা

22
গুগলারের জন্য আপডেট: toLocaleStringএনটিএল অন্তর্ভুক্তির মাধ্যমে ভিডে 01.12 হিসাবে নোড.জেজে কাজ করে ।
শ্রোবিনসন

8
@ এমএসসি আপনার চেষ্টা করা উচিত parseInt("1234567", 10).toLocaleString('en-US', {minimumFractionDigits: 2})বা new Number("1234567").toLocaleString('en-US', {minimumFractionDigits: 2})পরিবর্তে। এটি কোনও কাজ করে না কারণ আপনি এটি কোনও স্ট্রিংয়ে ব্যবহার করেন, কোনও সংখ্যার নয়।
uKolka

244
var number = 1234567890; // Example number to be converted

⚠ মনে রাখবেন যে জাভাস্ক্রিপ্টটির সর্বাধিক পূর্ণসংখ্যার মান 9007199254740991


ToLocaleString :

number.toLocaleString(); // "1,234,567,890"

// A more complex example: 
var number2 = 1234.56789; // floating point example
number2.toLocaleString(undefined, {maximumFractionDigits:2}) // "1,234.57"


নাম্বার ফর্ম্যাট ( সাফারি সমর্থিত নয়):

var nf = new Intl.NumberFormat();
nf.format(number); // "1,234,567,890"

আমি যা যা পরীক্ষা করেছি (ফায়ারফক্স কমপক্ষে) সেগুলি পারফরম্যান্সের ক্ষেত্রে কমবেশি উভয়ই একই।


6
সেখানে যে কেউ বাস্তবায়ন করছে তার পক্ষে সাফারিতে নাম্বার ফর্ম্যাট সমর্থিত নয়।
মার্কোভেগা

6
টোকলস্ট্রস্ট্রিং সাফারিতেও সমর্থিত নয়
দীপক বাঁকা

3
ব্রাউজার সমর্থন সর্বদা প্রতিটি MDN পৃষ্ঠার নীচে উল্লেখ করা হয়, যা আমি লিঙ্ক করেছি।
vsync

5
toLocaleStringসাফারি বিষয়ে প্রাথমিক কাজ, বিকল্পগুলি করবেন না
ডান্ডাভিস

3
toLocaleStringসমাধান সম্ভবত এছাড়াও পছন্দসই লোকেল, তাই অন্তর্ভুক্ত করা উচিত toLocaleString("en"), কারণ ইংরেজি প্যাটার্ন ব্যবহার কমা। তবে, যদি toLocaleString()লোকেল ছাড়াই ফ্রান্সে চালানো হয়, তবে এটি কমাগুলির পরিবর্তে পিরিয়ড অর্জন করবে কারণ এটি স্থানীয়ভাবে হাজার হাজারকে আলাদা করতে ব্যবহৃত হয়।
মাইক 'পোম্যাক্স' কামারম্যানস

112

আমি phpjs.org এর নম্বর_ ফর্ম্যাট () ব্যবহার করার পরামর্শ দিচ্ছি

function number_format(number, decimals, dec_point, thousands_sep) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // +      input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +   improved by: davook
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Jay Klehr
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Theriault
    // +   improved by: Drew Noakes
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *    example 10: number_format('1.20', 2);
    // *    returns 10: '1.20'
    // *    example 11: number_format('1.20', 4);
    // *    returns 11: '1.2000'
    // *    example 12: number_format('1.2000', 3);
    // *    returns 12: '1.200'
    var n = !isFinite(+number) ? 0 : +number, 
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        toFixedFix = function (n, prec) {
            // Fix for IE parseFloat(0.55).toFixed(0) = 0;
            var k = Math.pow(10, prec);
            return Math.round(n * k) / k;
        },
        s = (prec ? toFixedFix(n, prec) : Math.round(n)).toString().split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

আপডেট 02/13/14

লোকেরা এটি প্রত্যাশা অনুযায়ী কাজ করে না বলে রিপোর্ট করে আসছে, তাই আমি একটি জেএস ফিডাল করেছি যাতে স্বয়ংক্রিয় পরীক্ষার অন্তর্ভুক্ত।

আপডেট 26/11/2017

এখানে সামান্য পরিবর্তিত আউটপুট সহ স্ট্যাক স্নিপেট হিসাবে সেই ফ্রিল্ডটি এখানে:

function number_format(number, decimals, dec_point, thousands_sep) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // +      input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +   improved by: davook
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Jay Klehr
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Theriault
    // +   improved by: Drew Noakes
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *    example 10: number_format('1.20', 2);
    // *    returns 10: '1.20'
    // *    example 11: number_format('1.20', 4);
    // *    returns 11: '1.2000'
    // *    example 12: number_format('1.2000', 3);
    // *    returns 12: '1.200'
    var n = !isFinite(+number) ? 0 : +number, 
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        toFixedFix = function (n, prec) {
            // Fix for IE parseFloat(0.55).toFixed(0) = 0;
            var k = Math.pow(10, prec);
            return Math.round(n * k) / k;
        },
        s = (prec ? toFixedFix(n, prec) : Math.round(n)).toString().split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

var exampleNumber = 1;
function test(expected, number, decimals, dec_point, thousands_sep)
{
    var actual = number_format(number, decimals, dec_point, thousands_sep);
    console.log(
        'Test case ' + exampleNumber + ': ' +
        '(decimals: ' + (typeof decimals === 'undefined' ? '(default)' : decimals) +
        ', dec_point: "' + (typeof dec_point === 'undefined' ? '(default)' : dec_point) + '"' +
        ', thousands_sep: "' + (typeof thousands_sep === 'undefined' ? '(default)' : thousands_sep) + '")'
    );
    console.log('  => ' + (actual === expected ? 'Passed' : 'FAILED') + ', got "' + actual + '", expected "' + expected + '".');
    exampleNumber++;
}

test('1,235',    1234.56);
test('1 234,56', 1234.56, 2, ',', ' ');
test('1234.57',  1234.5678, 2, '.', '');
test('67,00',    67, 2, ',', '.');
test('1,000',    1000);
test('67.31',    67.311, 2);
test('1,000.6',  1000.55, 1);
test('67.000,00000', 67000, 5, ',', '.');
test('1',        0.9, 0);
test('1.20',     '1.20', 2);
test('1.2000',   '1.20', 4);
test('1.200',    '1.2000', 3);
.as-console-wrapper {
  max-height: 100% !important;
}


আমি এটি চিহ্নিত করেছি তা নয়, তবে আমি বিশ্বাস করি লোকেরা এটি করেছে কারণ এটি কাজ করে না। এটি যেমন দাঁড়িয়েছে আমি তেমনি আপনার পরীক্ষাগুলির মধ্যেও কাজ করে না।
অ্যান্ড্রু এস

3
@ অ্যান্ড্রু এস - কেবল 1 জন এটি চিহ্নিত করেছেন। এটি কাজ করে, আমি এটি নিজের কোডটিতে বহুবার ব্যবহার করেছি। এটি আমার কোডও নয় (আমার পরীক্ষাগুলিও নয়), আমি যে সাইটটি এসেছে সেটিকে উল্লেখ করেছি, যা একটি সুপরিচিত সাইট। আপনি যে কোডটি দেখছেন তা 3 বছরের পুরানো হিসাবে সম্ভবত এগুলির একটি আপডেট সংস্করণ রয়েছে।
কেরি জোন্স

13
@ernix - অপারেটর জাভাস্ক্রিপ্টের জন্য জিজ্ঞাসা করেছিল, আমি যে উত্তরটি দিয়েছি তা হল জাভাস্ক্রিপ্ট। এটি একটি পিএইচপি ফাংশনটির একটি জাভাস্ক্রিপ্ট ব্যাখ্যা।
কেরি জোন্স

2
@ বার্নিক্স - ওপি যে উদাহরণ দিয়েছিল তা প্রত্যাশা অনুযায়ী ঠিক কাজ করে। আমি একটি ঝাঁকুনি রাখলাম যাতে আপনি দেখতে পারেন।
কেরি জোন্স

4
@ বার্নিক্স - ঠিক আছে, তবে মুল বক্তব্যটি এটি ওপি যা চেয়েছিল ঠিক তাই করে। এটি অন্য কোনও সাইট থেকে এসেছে (আমার দ্বারা পরিচালিত নয়, এবং আমি এটি আগে বলেছি), এবং এটি যথাযথ পরিবর্তনশীল দেওয়ার সময়, এটি ঠিক যেমনটি বলেছেন তেমন কাজ করে। আপনি যদি বাগ হিসাবে বিশ্বাস করেন তবে phpjs.org এ যোগাযোগ করুন বা তাদের কোনও আপডেট সংস্করণ রয়েছে কিনা তা দেখুন।
কেরি জোন্স

75

এটি @ মাইকেজ 302 এর উত্তরের একটি ভিন্নতা, তবে দশমিকের সাথে সংখ্যার সমর্থন করতে পরিবর্তিত হয়েছে (প্রতি @ নিউ-রা-এর প্রতিক্রিয়া অনুযায়ী নম্বরটি উইথকমাস (12345.6789) -> "12,345.6,789" "12,345.6789" এর পরিবর্তে "

function numberWithCommas(n) {
    var parts=n.toString().split(".");
    return parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (parts[1] ? "." + parts[1] : "");
}


67
function formatNumber (num) {
    return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
}

print(formatNumber(2665));      // 2,665
print(formatNumber(102665));    // 102,665
print(formatNumber(111102665)); // 111,102,665

এটি আমার উত্তরটি না করে এমন কি করে? রেজেক্স কিছুটা আলাদা দেখায় তবে দেখে মনে হচ্ছে এটি একই জিনিস করা উচিত।
ইলিয়াস জামারিয়ার

8
এটি সংক্ষিপ্ত :)
তুতানখামেন

4
এটি মার্জিত। ঠিক আমি খুঁজছেন ছিল কি.
ঐতিহ্যগত

4
Blog.tompawlak.org/number-currency- formattting- জাভাস্ক্রিপ্ট থেকে ? জ্ঞাত সমস্যা: formatNumber (0.123456) = 0.123,456 জেএসে লুকবিহিনের অনুপস্থিতি এটি একটি মার্জিত রেজেক্সের সাহায্যে ঠিক করা কঠিন করে তোলে।
ভ্লাদ

1
123456789.123456789.to স্ট্রিং ()। প্রতিস্থাপন (/ (\ d) (? = (\ D {3}) + \।) / জি, '$ 1,') => 123,456,789.12345679
কেনবার্কলে

53

নিয়মিত অভিব্যক্তি ব্যবহার করা

function toCommas(value) {
    return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
console.log(toCommas(123456789)); // 123,456,789

console.log(toCommas(1234567890)); // 1,234,567,890
console.log(toCommas(1234)); // 1,234

ToLocaleString () ব্যবহার করে

var number = 123456.789;

// request a currency format
console.log(number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
// → 123.456,79 €

// the Japanese yen doesn't use a minor unit
console.log(number.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
// → ¥123,457

// limit to three significant digits
console.log(number.toLocaleString('en-IN', { maximumSignificantDigits: 3 }));
// → 1,23,000

রেফ এমডিএন: সংখ্যা.প্রোটোটাইপ.টোকল স্ট্রিং ()

ইন্টেল.নাম্বরফর্ম্যাট () ব্যবহার করে

var number = 123456.789;

console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
// expected output: "123.456,79 €"

// the Japanese yen doesn't use a minor unit
console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(number));
// expected output: "¥123,457"

// limit to three significant digits
console.log(new Intl.NumberFormat('en-IN', { maximumSignificantDigits: 3 }).format(number));

// expected output: "1,23,000"

রেফ Intl.Numberformat

এখানে ডেমো

<script type="text/javascript">
  // Using Regular expression
  function toCommas(value) {
    return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  }

  function commas() {
    var num1 = document.myform.number1.value;

    // Using Regular expression
    document.getElementById('result1').value = toCommas(parseInt(num1));
    // Using toLocaleString()

    document.getElementById('result2').value = parseInt(num1).toLocaleString('ja-JP', {
      style: 'currency',
      currency: 'JPY'
    });

    // Using Intl.NumberFormat()
    document.getElementById('result3').value = new Intl.NumberFormat('ja-JP', {
      style: 'currency',
      currency: 'JPY'
    }).format(num1);
  }
</script>
<FORM NAME="myform">
  <INPUT TYPE="text" NAME="number1" VALUE="123456789">
  <br>
  <INPUT TYPE="button" NAME="button" Value="=>" onClick="commas()">
  <br>Using Regular expression
  <br>
  <INPUT TYPE="text" ID="result1" NAME="result1" VALUE="">
  <br>Using toLocaleString()
  <br>
  <INPUT TYPE="text" ID="result2" NAME="result2" VALUE="">
  <br>Using Intl.NumberFormat()
  <br>
  <INPUT TYPE="text" ID="result3" NAME="result3" VALUE="">

</FORM>

কর্মক্ষমতা

কর্মক্ষমতা http://jsben.ch/sifRd


আপনি গতিশীল টাইপ করলে এটি কাজ করে না। যদি আপনি কেবল এটির মান দেন তবে এটি কার্যকর হয়, তবে আপনি যদি ক্রমাগত একটি মান খাওয়ান তবে কমাগুলি ভুল জায়গায় যুক্ত করা হয়।
এডগার কুইন্টেরো

আমি আমার উত্তরের ডেমো আপডেট করেছি। একটি পাঠ্যবক্সে একটি গতিশীল মান প্রবেশ করার সময়। আপনি পরীক্ষার চেষ্টা করেছেন @ অ্যাডগারকুইনটারো
Tính Ngô Quang

39

Intl.NumberFormat

নেটিভ জেএস ফাংশন। আইই 11, এজ, সর্বশেষতম সাফারি, ক্রোম, ফায়ারফক্স, অপেরা, আইওএসে সাফারি এবং অ্যান্ড্রয়েডে ক্রোমের সমর্থিত।

var number = 3500;

console.log(new Intl.NumberFormat().format(number));
// → '3,500' if in US English locale

আপনার মন্তব্যের জবাবে আমার উত্তর আপডেট হয়েছিল। ধন্যবাদ!
ডাস্টিন সান

35

তাদের জবাবের জন্য প্রত্যেককে ধন্যবাদ। আরও একটি "এক-আকারের-ফিট-সব" সমাধান তৈরি করার জন্য আমি উত্তরগুলির কয়েকটি তৈরি করেছি।

প্রথম স্নিপেট একটি ফাংশন যে নকল যোগ পিএইচপি 's number_format()নম্বর প্রোটোটাইপ করতে। যদি আমি একটি সংখ্যার ফর্ম্যাট করি তবে আমি সাধারণত দশমিক স্থান চাই তাই ফাংশনটি দশমিক জায়গাগুলির সংখ্যাতে প্রদর্শিত হয়। কিছু দেশ দশমিক হিসাবে দশমিক এবং দশমিক হিসাবে কয়েক হাজার বিভাজক হিসাবে ফাংশন এই বিভাজকগুলিকে সেট করার অনুমতি দেয় be

Number.prototype.numberFormat = function(decimals, dec_point, thousands_sep) {
    dec_point = typeof dec_point !== 'undefined' ? dec_point : '.';
    thousands_sep = typeof thousands_sep !== 'undefined' ? thousands_sep : ',';

    var parts = this.toFixed(decimals).split('.');
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousands_sep);

    return parts.join(dec_point);
}

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

var foo = 5000;
console.log(foo.numberFormat(2)); // us format: 5,000.00
console.log(foo.numberFormat(2, ',', '.')); // european format: 5.000,00

আমি দেখতে পেলাম যে আমার প্রায়শই গণিত ক্রিয়াকলাপের জন্য নম্বরটি ফিরে পাওয়া দরকার, তবে পার্সফ্লোট 5000 বা 5 তে রূপান্তর করে, কেবল পূর্ণসংখ্যার মানগুলির প্রথম ক্রম গ্রহণ করে। তাই আমি আমার নিজস্ব ফ্লোট রূপান্তর ফাংশন তৈরি করেছি এবং এটি স্ট্রিং প্রোটোটাইপে যুক্ত করেছি।

String.prototype.getFloat = function(dec_point, thousands_sep) {
    dec_point = typeof dec_point !== 'undefined' ? dec_point : '.';
    thousands_sep = typeof thousands_sep !== 'undefined' ? thousands_sep : ',';

    var parts = this.split(dec_point);
    var re = new RegExp("[" + thousands_sep + "]");
    parts[0] = parts[0].replace(re, '');

    return parseFloat(parts.join(dec_point));
}

এখন আপনি নিম্নলিখিত দুটি ফাংশন ব্যবহার করতে পারেন:

var foo = 5000;
var fooString = foo.numberFormat(2); // The string 5,000.00
var fooFloat = fooString.getFloat(); // The number 5000;

console.log((fooString.getFloat() + 1).numberFormat(2)); // The string 5,001.00

2
খুব সুন্দর, আমি প্রথম পদ্ধতি ধার নিয়েছি;) আপনি যখন ইউরোপীয় ফর্ম্যাটটি ব্যবহার করতে চান তখন এটি সঠিক ফলাফল দেয় না এবং সংখ্যাটি ভগ্নাংশ। লাইন 5 হওয়া উচিত:var parts = this.toFixed(decimals).toString().split('.');
vbwx

তুমি ঠিক! টু ফিক্সড () কমাতে একটি পিরিয়ড এবং তাই 'পরিবর্তন করে। পরিবর্তে ব্যবহার করা উচিত var dec_point। যে ইশারা জন্য ধন্যবাদ।
কোনটি

আপনি কি এর জন্য একটি এনপিএম মডিউল তৈরি করতে পারেন?
chovy

3
@ জে.মনি। টো স্ট্রিং অপ্রয়োজনীয়, টু ফিক্সড ইতিমধ্যে একটি স্ট্রিং প্রদান করে।
এরিয়েল

আমি জানি না কেন আপনি এখানে পিএইচপি আদৌ উল্লেখ করেছেন, বা একটি প্রোটোটাইপিকাল ফাংশন দিয়েছেন যা ইতিমধ্যে বিদ্যমান
ভিএনসিঙ্ক

27

এই প্রশ্নটির উত্তর পেয়ে আমি যথেষ্ট মুগ্ধ imp আমি ইউকোলকার উত্তরটি পছন্দ করি :

n.toLocaleString()

তবে দুর্ভাগ্যক্রমে, স্প্যানিশ জাতীয় কিছু লোকের ক্ষেত্রে, এটি 10,000 এর নীচের সংখ্যার জন্য প্রত্যাশার মতো (IMHO) কাজ করে না:

Number(1000).toLocaleString('ES-es')

দেয় 1000ও দেয় না 1.000

কেন তা জানতে সমস্ত ব্রাউজারে 10000 এর চেয়ে কম সংখ্যায় কাজ করছেন না তা দেখুন লোকাল স্ট্রিং

সুতরাং আমাকে উত্তরটি এলিয়াস জামারিয়া ডান সহস্র বিভাজক চরিত্রটি চয়ন করে ব্যবহার করতে হয়েছিল :

n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, Number(10000).toLocaleString().substring(2, 3))

এই এক উভয় লোকেল যে ব্যবহারের জন্য একটি এক-লাইনের ভাল কাজ করে ,বা .সহস্র বিভাজক এবং শুরু হয় সব ক্ষেত্রেই 1,000 থেকে কাজ করে।

Number(1000).toString().replace(/\B(?=(\d{3})+(?!\d))/g, Number(10000).toLocaleString().substring(2, 3))

1.000একটি স্পেনীয় স্থানীয় প্রসঙ্গ সহ দেয় ।

কোনও সংখ্যা ফর্ম্যাট করার উপায়ের উপর যদি আপনার নিখুঁত নিয়ন্ত্রণ পেতে চান তবে আপনি নিম্নলিখিত বিষয়গুলিও দেখতে পারেন:

let number   = 1234.567
let decimals = 2
let decpoint = '.' // Or Number(0.1).toLocaleString().substring(1, 2)
let thousand = ',' // Or Number(10000).toLocaleString().substring(2, 3)

let n = Math.abs(number).toFixed(decimals).split('.')
n[0] = n[0].split('').reverse().map((c, i, a) =>
  i > 0 && i < a.length && i % 3 == 0 ? c + thousand : c
).reverse().join('')
let final = (Math.sign(number) < 0 ? '-' : '') + n.join(decpoint)

console.log(final)

দেয় 1,234.57

এটির জন্য নিয়মিত প্রকাশের প্রয়োজন নেই। এটি toFixedপ্রথমে দশমিকের কাঙ্ক্ষিত পরিমাণের সাথে সংখ্যাটি সামঞ্জস্য করে কাজ করে , তারপর .যদি এটি থাকে তবে দশমিক পয়েন্টের চারপাশে ভাগ করে । এর পরে বাম দিকটি অঙ্কের অ্যারেতে পরিণত হয় যা বিপরীত হয়। তারপরে শুরু থেকে প্রতি তিন অঙ্কে কয়েক হাজার বিভাজক যুক্ত করা হয় এবং ফলাফলটি আবার বিপরীত হয়। চূড়ান্ত ফলাফল দুটি অংশের মিলন। ইনপুট নম্বরটির চিহ্নটি Math.absপ্রথমে মুছে ফেলা হয় এবং তারপরে প্রয়োজনে আবার রেখে দেওয়া হয়।

এটি কোনও এক-লাইনার নয় তবে খুব বেশি দীর্ঘ নয় এবং সহজেই কোনও ফাংশনে রূপান্তরিত হয়। ভেরিয়েবলগুলি স্পষ্টতার জন্য যুক্ত করা হয়েছে, তবে আগে থেকে জানা থাকলে সেগুলি তাদের পছন্দসই মানগুলির দ্বারা প্রতিস্থাপিত হতে পারে। আপনি এক্সপ্রেশন ব্যবহার করতে পারেন ব্যবহারের toLocaleStringআউট দশমিক বিন্দু জন্য সঠিক অক্ষর এবং বর্তমান লোকেলের জন্য সহস্র বিভাজক এটি একটি উপায় হিসেবে (যে একটি আরো আধুনিক জাভাস্ক্রিপ্ট প্রয়োজন মনে ভালুক।)


23

আমি মনে করি এটি সবচেয়ে সংক্ষিপ্ত নিয়মিত প্রকাশ যা এটি করে:

/\B(?=(\d{3})+\b)/g

"123456".replace(/\B(?=(\d{3})+\b)/g, ",")

আমি এটি কয়েকটি সংখ্যায় পরীক্ষা করেছি এবং এটি কার্যকর হয়েছে।


এই ক্ষেত্রে বিভাজকের পরে কোনও বিন্দুর পরে 3 টিরও বেশি সংখ্যার সাথে যদি আপনার ভাসমান সংখ্যা না থাকে তবেই কেবলমাত্র ভাল কাজ করে। অন্যথায় এটি কমাও যুক্ত করে। "1234567890.1234567890"। স্থান (/ \ বি (? = (\ D {3}) + \ বি) / জি, ",") এটি উদাহরণস্বরূপ কাজ করবে না। "1,234,567,890.1,234,567,890"
মার্সিও

1
মুদ্রার জন্য যদিও ভাল কাজ করে! কমা যোগ করার আগে আপনার অঙ্কগুলি কেবল গোল করুন।
কাইল চদা

1
এটি যুক্ত হয়, দশমিক পয়েন্টের পরে: 12.3456 ".রেলেস (/ \ বি (? = (\ D {3}) + \ বি) / জি,", ") == 12.3,456
শ্রী তিওয়ারি

21

Number.prototype.toLocaleString()এটি যদি সমস্ত ব্রাউজার (সাফারি) দ্বারা স্থানীয়ভাবে সরবরাহ করা হত তবে দুর্দান্ত হত ।

আমি অন্যান্য সমস্ত উত্তর যাচাই করে দেখলাম তবে কোনটিই এটি পলিফিল মনে হয়নি। এখানে তার দিকে একটি পোক, যা আসলে প্রথম দুটি উত্তরের সংমিশ্রণ; যদি toLocaleStringএটি কাজ করে তবে এটি এটি ব্যবহার করে, যদি এটি কোনও কাস্টম ফাংশন ব্যবহার করে না।

var putThousandsSeparators;

putThousandsSeparators = function(value, sep) {
  if (sep == null) {
    sep = ',';
  }
  // check if it needs formatting
  if (value.toString() === value.toLocaleString()) {
    // split decimals
    var parts = value.toString().split('.')
    // format whole numbers
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, sep);
    // put them back together
    value = parts[1] ? parts.join('.') : parts[0];
  } else {
    value = value.toLocaleString();
  }
  return value;
};

alert(putThousandsSeparators(1234567.890));


1
সচেতন থাকুন যে পলিফিল কেবলমাত্র এমন সংখ্যাগুলির সাথে কাজ করে যা সর্বাধিক 3 দশমিক। যেমন: 0.12345আউটপুট দেবে 0.12,345। এর জন্য একটি ভাল বাস্তবায়ন আন্ডারস্কোর
অ্যান্ডি

আপনি ঠিক বলেছেন, value > 1000যদি শর্তটি সেই কেসটিকে ঠিক করে দেয় তবে এটির জন্য একটি চাপ দেওয়ার পরেও এটি পোক ছিল এবং অবশ্যই আরও ভাল পরীক্ষিত সংস্করণ অন্য কোথাও পাওয়া যাবে, উল্লেখ করার জন্য ধন্যবাদ।
সিনান

1
এটি রাখা যথেষ্ট নয় value > 1000, কারণ এটি কোনও সংখ্যার জন্য একই হবে এবং 3 দশমিকের বেশি। যেমন 1000.12345আয় 1,000.12,345। আপনার উত্তর দুর্দান্ত এবং সঠিক পথে, তবে সম্পূর্ণ নয়। আমি কেবলমাত্র অন্য লোকদের জন্যই নির্দেশ করার চেষ্টা করছিলাম যা আপনার উত্তরটিতে হোঁচট খেতে পারে এবং বিভিন্ন ইনপুট ডেটা পরীক্ষা না করে কেবল এটি অনুলিপি / পাস্তা করে।
অ্যান্ডি

1
ঠিক আছে, এটির জন্য আরও একটি সম্পাদনা দরকার :) আমি সম্মত, তবে এখন অন্তত এটি বেশিরভাগ ক্ষেত্রে কাজ করা উচিত।
সিনান

18

হাজার হাজার বিভাজক ব্রাউজারের Intlঅবজেক্টটি ব্যবহার করে আন্তর্জাতিক বান্ধব উপায়ে sertedোকানো যেতে পারে :

Intl.NumberFormat().format(1234);
// returns "1,234" if the user's locale is en_US, for example

আরও জন্য নম্বরে ফর্ম্যাটে MDN এর নিবন্ধটি দেখুন, আপনি স্থানীয় আচরণ বা ব্যবহারকারীর ডিফল্ট নির্দিষ্ট করতে পারেন। এটি খানিকটা বোকা কারণ এটি স্থানীয় পার্থক্যকে সম্মান করে; অনেক দেশ পিরিয়ড ডিজিট আলাদা করতে ব্যবহার করে যখন কমা দশমিককে বোঝায়।

এখনও সমস্ত ব্রাউজারগুলিতে ইন্টেল.নম্বার ফর্ম্যাটটি উপলভ্য নয় তবে এটি সর্বশেষতম ক্রোম, অপেরা এবং আইই তে কাজ করে। ফায়ারফক্সের পরবর্তী প্রকাশে এটি সমর্থন করা উচিত। ওয়েবকিটের বাস্তবায়নের জন্য সময়রেখা আছে বলে মনে হচ্ছে না।


2
যদিও আমরা যদি একটি সাধারণ অন্তর্নির্মিত ফাংশন ব্যবহার করতে পারি তবে এটি দুর্দান্ত হবে, তবে এটিতে রয়েছে দুর্দান্ত ব্রাউজার বাস্তবায়ন। উদাহরণস্বরূপ, IE 8-10 এবং সমস্ত সাফারি এটিকে সমর্থন করে না
ব্লেইন ক্যাসটেন

@ ব্লাইনকাস্টেন এখানে পুরানো ব্রাউজারগুলির জন্য সম্পূর্ণ সুসংগত পলিফিল রয়েছে: github.com/andyearnshaw/Intl.js এটি বিশাল, তবে এটি কার্যকর।
মাহন

1
পলিফিল সিডিএন এর মাধ্যমে উপলব্ধ (কেবলমাত্র ব্যবহারকারীদের উপর ভিত্তি করে যা প্রয়োজন তা ফেরত দেয়): cdn.polyfill.io/v2/polyfill.min.js?features=Intl
কেভিন

লোকলেস্ট্রিংয়ের সাথে বিশাল সংখ্যক ফর্ম্যাট করার সমস্যা থাকলে, এটি দুর্দান্তভাবে কাজ করেছে (পলিফিল সহ)
জিজ্ঞাসা করুন

18

আপনি আপনার মুদ্রা প্রয়োজনীয় বিন্যাস করতে এই প্রক্রিয়াটি ব্যবহার করতে পারেন।

var nf = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',
  minimumFractionDigits: 2,
  maximumFractionDigits: 2
});
nf.format(123456.789); // ‘$123,456.79’

আরও তথ্যের জন্য আপনি এই লিঙ্কটি অ্যাক্সেস করতে পারেন।

https://www.justinmccandless.com/post/formatting-currency-in-javascript/


এটি সঠিক, বহনযোগ্য, নেটিভ উত্তর is আশা করি আমি একাধিকবার উপড়ে ফেলতে পারতাম।
জ্যারেড স্মিথ

14

আপনি যদি মুদ্রার মানগুলি নিয়ে কাজ করছেন এবং অনেকগুলি ফর্ম্যাট করছেন তবে ক্ষুদ্র অ্যাকাউন্টিং.জেগুলি যুক্ত করা ভাল s

// Default usage:
accounting.formatMoney(12345678); // $12,345,678.00

// European formatting (custom symbol and separators), could also use options object as second param:
accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99

// Negative values are formatted nicely, too:
accounting.formatMoney(-500000, "£ ", 0); // £ -500,000

// Simple `format` string allows control of symbol position [%v = value, %s = symbol]:
accounting.formatMoney(5318008, { symbol: "GBP",  format: "%v %s" }); // 5,318,008.00 GBP

1
লিঙ্কটি আর কাজ করে না। তবে এটির
ush189

13

নিম্নলিখিত কোডটিতে চর স্ক্যান ব্যবহার করা হয়েছে, সুতরাং কোনও রেজেস নেই।

function commafy( num){
  var parts = (''+(num<0?-num:num)).split("."), s=parts[0], L, i=L= s.length, o='';
  while(i--){ o = (i===0?'':((L-i)%3?'':',')) 
                  +s.charAt(i) +o }
  return (num<0?'-':'') + o + (parts[1] ? '.' + parts[1] : ''); 
}

এটি প্রতিশ্রুতিবদ্ধ অভিনয় দেখায়: http://jsperf.com/number-formatting-with-commas/5

2015.4.26: সংখ্যা <0 হলে সমস্যা সমাধানের জন্য মাইনর ফিক্স। Https://jsfiddle.net/runsun/p5tqqvs3/ দেখুন


commafy(-123456)এটি যা দেয় তার সাথে এটি কাজ করে না-,123,456
wrossmck

এটা অসাধারণ! Jsperf একসাথে রাখার জন্য ধন্যবাদ
ফ্রেডেন্ট

এই স্নিপেট একটি পরম দানব, আউট সবকিছু সম্পাদন করে।
নিকক নিউম্যান

13

এখানে একটি সাধারণ ফাংশন যা হাজার বিভাজকের জন্য কমা সন্নিবেশ করিয়েছে। এটি RegEx এর চেয়ে অ্যারে ফাংশন ব্যবহার করে।

/**
 * Format a number as a string with commas separating the thousands.
 * @param num - The number to be formatted (e.g. 10000)
 * @return A string representing the formatted number (e.g. "10,000")
 */
var formatNumber = function(num) {
    var array = num.toString().split('');
    var index = -3;
    while (array.length + index > 0) {
        array.splice(index, 0, ',');
        // Decrement by 4 since we just added another unit to the array.
        index -= 4;
    }
    return array.join('');
};

উদাহরণ সহ কোডস্যান্ডবক্সের লিঙ্ক: https://codesandbox.io/s/p38k63w0vq


1
হাই .. এই উদাহরণটি দুর্দান্ত। তবে এটি দশমিক অংশের জন্য কমাও দেবে। কেবল একটি সম্পাদনা: ফাংশন ফর্ম্যাট নাম্বার (সংখ্যা) dec var ডেসিমাল পার্ট = ''; num = num.toString (); যদি (num.indexOf ('।')! = -1) {দশমিক পার্ট = '।' + num.split ('।') [1]; num = parseInt (num.split ('।') [0]); } var অ্যারে = num.toString ()। বিভক্ত (''); var সূচক = -3; যখন (অ্যারে। দৈর্ঘ্য + সূচক> 0) ray অ্যারে.স্প্লাইস (সূচক, 0, ','); // 4 দ্বারা হ্রাস হ'ল আমরা অ্যারেতে আরও একটি ইউনিট যুক্ত করেছি। সূচক - = 4; } ফেরত অ্যারে.জয়েন ('') + দশমিক অংশ; };
আকি 143 এস

ধন্যবাদ জনাব. এটাই আমার দরকার ছিল।
আমির হোসেইন আহমদী

11

ভারতের জন্য মুদ্রার ফর্ম্যাট পরিচালনা করতে এই কোডটি ব্যবহার করুন। অন্যান্য দেশের মুদ্রা পরিচালনা করতে দেশের কোড পরিবর্তন করা যেতে পারে।

let amount =350256.95
var formatter = new Intl.NumberFormat('en-IN', {
  minimumFractionDigits: 2,
});

// Use it.

formatter.format(amount);

আউটপুট:

3,50,256.95

যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে। এটি পড়ুন
শান্তেশ্বর ইন্দে

@ শাশ্বেশ্বর ইন্দে আমি উত্তরটি আরও উন্নত করতে অতিরিক্ত প্রসঙ্গ যুক্ত করব
বাথরি নাথান

11

আপনি ইন্টেল.নম্বার ফর্ম্যাট কনস্ট্রাক্টরও ব্যবহার করতে পারেন । আপনি এটি কীভাবে করতে পারেন তা এখানে।

 resultNumber = new Intl.NumberFormat('en-IN', { maximumSignificantDigits: 3 }).format(yourNumber); 

এই নোড জেএস কাজ করছে না। এটি ভারতীয় ফর্ম্যাটে কোনও প্রতিক্রিয়া দিচ্ছে না
সুরজ ডালভী

7

এই পোস্টে হোঁচট খাওয়ার আগে আমি এটি লিখেছিলাম। কোনও রেজেক্স নেই এবং আপনি আসলে কোডটি বুঝতে পারবেন।

$(function(){
  
  function insertCommas(s) {

    // get stuff before the dot
    var d = s.indexOf('.');
    var s2 = d === -1 ? s : s.slice(0, d);

    // insert commas every 3 digits from the right
    for (var i = s2.length - 3; i > 0; i -= 3)
      s2 = s2.slice(0, i) + ',' + s2.slice(i);

    // append fractional part
    if (d !== -1)
      s2 += s.slice(d);

    return s2;

  }
  
  
  $('#theDudeAbides').text( insertCommas('1234567.89012' ) );
  
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div id="theDudeAbides"></div>


1
আমি ফাংশনের শুরুতে s.toString () যুক্ত করেছি যাতে এটি সংখ্যাগুলিও গ্রহণ করতে পারে, কেবল স্ট্রিংগুলিতে নয়। এটি আমার পছন্দের উত্তর কারণ এটি পাঠযোগ্য, সংক্ষিপ্ত এবং রেগেক্সের উত্তরগুলির মতো কোনও বাগ নেই।
FeFiFoFu

7
var formatNumber = function (number) {
  var splitNum;
  number = Math.abs(number);
  number = number.toFixed(2);
  splitNum = number.split('.');
  splitNum[0] = splitNum[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  return splitNum.join(".");
}

সম্পাদনা: ফাংশনটি কেবল ইতিবাচক সংখ্যা নিয়ে কাজ করে। অসাধারণ জন্য:

var number = -123123231232;
formatNumber(number)

আউটপুট: "123,123,231,232"

তবে উপরোক্ত toLocaleString()পদ্ধতির প্রশ্নের উত্তর দেওয়ার জন্য কেবল সমস্যার সমাধান হয়।

var number = 123123231232;
    number.toLocaleString()

আউটপুট: "123,123,231,232"

উত্সাহিত করা!


1
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
ডোনাল্ড ডাক

1
দুর্দান্ত স্ক্রিপ্ট, তবে এটি নেতিবাচক সংখ্যার সাথে কাজ করে না।
রাল্ফ ডেভিড আবারনাথির

7

আমার উত্তরটি হ'ল একমাত্র উত্তর যা পুরোপুরি আরও বুদ্ধিমান বিকল্পের সাথে jQuery প্রতিস্থাপন করে:

function $(dollarAmount)
{
    const locale = 'en-US';
    const options = { style: 'currency', currency: 'USD' };
    return Intl.NumberFormat(locale, options).format(dollarAmount);
}

এই সমাধানটি কেবল কমা যোগ করে না, তবে এটি আপনার নিকটতম $(1000.9999)পেনিতেও গোল হয়ে যায় যদি আপনি। 1,001.00 পাবেন এমন কোনও পরিমাণ আপনি ইনপুট করেন । অতিরিক্তভাবে, আপনার ইনপুট মানটি নিরাপদে কোনও সংখ্যা বা একটি স্ট্রিং হতে পারে; এটা কোন ব্যাপার না।

যদি আপনি অর্থের সাথে লেনদেন করেন তবে পরিমাণের উপরে কোনও শীর্ষস্থানীয় ডলারের চিহ্নটি দেখতে চান না, আপনি এই ফাংশনটিও যুক্ত করতে পারেন যা পূর্ববর্তী ফাংশনটি ব্যবহার করে তবে মুছে ফেলে $:

function no$(dollarAmount)
{
    return $(dollarAmount).replace('$','');
}

যদি আপনি অর্থের সাথে লেনদেন না করে থাকেন এবং দশমিক বিন্যাসের প্রয়োজনীয়তার বিভিন্নতা রয়েছে তবে এখানে আরও বহুমুখী একটি কার্য রয়েছে:

function addCommas(number, minDecimalPlaces = 0, maxDecimalPlaces = Math.max(3,minDecimalPlaces))
{
    const options = {};
    options.maximumFractionDigits = maxDecimalPlaces;
    options.minimumFractionDigits = minDecimalPlaces;
    return Intl.NumberFormat('en-US',options).format(number);
}

ওহ, এবং যাইহোক, এই কোডটি ইন্টারনেট এক্সপ্লোরারের কিছু পুরানো সংস্করণে কাজ করে না তা সম্পূর্ণ ইচ্ছাকৃত। আমি যে কোনও সময় আইটি ভাঙার চেষ্টা করি যে আমি এটি আধুনিক মান সমর্থন করে না তা ধরতে পারি।

দয়া করে মনে রাখবেন যে মন্তব্য বিভাগে অতিরিক্ত প্রশংসা, অফ-বিষয় হিসাবে বিবেচিত হয়েছে। পরিবর্তে, আমাকে কেবলমাত্র ভোট দিয়ে স্নান করুন।


1
সংখ্যা (এন) .to লোকাল স্ট্রিং () সেরা উত্তর বলে মনে হচ্ছে তবে আপনি সম্ভবত নতুন ইনটেল.নম্বার ফর্ম্যাট ('এন-ইউএস') এর মতো কিছু ব্যবহার করতে চান তবে ডলার চিহ্নগুলি এবং দশমিকগুলি বাদ দেওয়ার পরিবর্তে ফর্ম্যাট (এন) যদি সমস্ত থাকে ব্যবহারকারী চায় তাদের সংখ্যা কমা।
বামাকনফটন

@ বিম্যাকনফটন: আপনি যখন অর্থের সাথে লেনদেন করবেন না তখন এটি একটি ভাল বিষয়। তবে, আপনি যদি অর্থের সাথে লেনদেন করেন এবং কেবল "শীর্ষস্থানীয় ডলারের সাইনটি চান না", সংখ্যা (1000.50)। টু লোকালস্ট্রিং () '1,000,000' উত্পাদন করে, যা অর্থের মানগুলি প্রদর্শন করার সময় সাধারণত তুচ্ছ শূন্যকে সরিয়ে দেয়। যদিও ভাল মন্তব্য: আপনারা কী বলেছেন তা প্রত্যেকেরই জানা উচিত।
লনি সেরা

6

আমার জন্য, সর্বোত্তম উত্তরটি লোকালস্ট্রিং ব্যবহার করা হচ্ছে যেমন কিছু সদস্য বলেছেন। আপনি যদি '$' চিহ্নটি অন্তর্ভুক্ত করতে চান তবে কেবল লুঙ্গুজে এবং টাইপ বিকল্পগুলি যুক্ত করুন। মেক্সিকো পেসো-তে সংখ্যার ফর্ম্যাট করার জন্য এখানে উদাহরণ এবং উদাহরণ রয়েছে

var n = 1234567.22
alert(n.toLocaleString("es-MX",{style:"currency", currency:"MXN"}))

শর্টকাট

1234567.22.toLocaleString("es-MX",{style:"currency", currency:"MXN"})

5

আমাকে উন্নতি করতে চেষ্টা করা যাক uKolka এর উত্তর কিছু সময় বাঁচাতে এবং হয়ত অন্যদের সাহায্য।

Numeral.js ব্যবহার করুন ।

document.body.textContent = numeral(1234567).format('0,0');
<script src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/1.4.5/numeral.min.js"></script>

ব্রাউজারের তুলনামূলক সমস্যা না হলে কেবল আপনার নাম্বার.প্রোটোটাইপ.টোলোক্যালস্ট্রিং () নিয়ে যাওয়া উচিত ।


এটি আমাকে এনপিএম সংখ্যার ইনস্টল করতে অনুপ্রাণিত করেছিল
স্টিম্পওয়ার্ড

5

একটি বিকল্প উপায়, দশমিক, বিভিন্ন বিভাজক এবং negativeণাত্মক সমর্থন করে।

var number_format = function(number, decimal_pos, decimal_sep, thousand_sep) {
    var ts      = ( thousand_sep == null ? ',' : thousand_sep )
        , ds    = ( decimal_sep  == null ? '.' : decimal_sep )
        , dp    = ( decimal_pos  == null ? 2   : decimal_pos )

        , n     = Math.floor(Math.abs(number)).toString()

        , i     = n.length % 3 
        , f     = ((number < 0) ? '-' : '') + n.substr(0, i)
    ;

    for(;i<n.length;i+=3) {
        if(i!=0) f+=ts;
        f+=n.substr(i,3);
    }

    if(dp > 0) 
        f += ds + parseFloat(number).toFixed(dp).split('.')[1]

    return f;
}

@ জিগনেশ সঙ্ঘানীর কিছু সংশোধন, তাঁর মন্তব্যটিকে উজ্জীবিত করতে ভুলবেন না।


আমার জন্য উপযুক্ত, প্রক্রিয়াজাতকরণের আগে বিন্যাস অপসারণ করার জন্য একটি নতুন লাইন যুক্ত করেছেন।
ডেনিস হেইডেন

2
fn.substr(0, i)সঙ্গে প্রতিস্থাপন n.substr(0, i)এবং এছাড়াও number.toFixed(dp).split('.')[1]প্রতিস্থাপন parseFloat(number).toFixed(dp).split('.')[1]। কারণ আমি যখন সরাসরি ব্যবহার করি তখন এটি আমাকে ত্রুটি দেয়। দয়া করে আপনার কোডটি আপডেট করুন
জিগনেশ সংঘনি

ত্রুটিযুক্ত. সংখ্যা বৃদ্ধি পায়। একটি নমুনা কল দুর্দান্ত হত!
মিমি

সিলটি ফ্লোরে স্যুইচ করা স্থির করে তবে অন্যান্য সমস্যাগুলি কী উত্থাপিত হবে তা নিশ্চিত নয়।
মিমি

1
Math.floor (-75.1) ব্যবহার করে দেখুন;)
MMM

4

আমি মনে করি এই সমস্যাটি এই সমস্যার সাথে সম্পর্কিত সমস্ত বিষয়ে যত্ন নেবে।

function commaFormat(inputString) {
    inputString = inputString.toString();
    var decimalPart = "";
    if (inputString.indexOf('.') != -1) {
        //alert("decimal number");
        inputString = inputString.split(".");
        decimalPart = "." + inputString[1];
        inputString = inputString[0];
        //alert(inputString);
        //alert(decimalPart);

    }
    var outputString = "";
    var count = 0;
    for (var i = inputString.length - 1; i >= 0 && inputString.charAt(i) != '-'; i--) {
        //alert("inside for" + inputString.charAt(i) + "and count=" + count + " and outputString=" + outputString);
        if (count == 3) {
            outputString += ",";
            count = 0;
        }
        outputString += inputString.charAt(i);
        count++;
    }
    if (inputString.charAt(0) == '-') {
        outputString += "-";
    }
    //alert(outputString);
    //alert(outputString.split("").reverse().join(""));
    return outputString.split("").reverse().join("") + decimalPart;
}

4

কেবলমাত্র ভবিষ্যতের গুগলারের জন্য (বা 'গুগলারদের অগত্যা নয়):

উপরে উল্লিখিত সমস্ত সমাধানগুলি দুর্দান্ত, তবে, RegExp এর মতো পরিস্থিতিতে ব্যবহার করা খুব খারাপ জিনিস হতে পারে be

সুতরাং, হ্যাঁ, আপনি প্রস্তাবিত কিছু বিকল্প ব্যবহার করতে পারেন বা এমন কি প্রাথমিক কিছু দরকারী যেমন লিখতে পারেন:

const strToNum = str => {

   //Find 1-3 digits followed by exactly 3 digits & a comma or end of string
   let regx = /(\d{1,3})(\d{3}(?:,|$))/;
   let currStr;

   do {
       currStr = (currStr || str.split(`.`)[0])
           .replace( regx, `$1,$2`)
   } while (currStr.match(regx)) //Stop when there's no match & null's returned

   return ( str.split(`.`)[1] ) ?
           currStr.concat(`.`, str.split(`.`)[1]) :
           currStr;

};

strToNum(`123`) // => 123
strToNum(`123456`) // => 123,456
strToNum(`-1234567.0987`) // => -1,234,567.0987

এখানে যে রিজেক্সট ব্যবহার করা হয়েছে তা মোটামুটি সহজ এবং কাজটি শেষ করতে লুপটি ঠিক কতবার সময় নেয়।

এবং আপনি এটিকে আরও ভালতর করে তুলতে পারেন, "ডিআরওয়াইফাই" কোড ইত্যাদি।

এখনো,

(-1234567.0987).toLocaleString();

(বেশিরভাগ পরিস্থিতিতে) আরও ভাল পছন্দ হবে।

পয়েন্টটি কার্যকর করার গতিতে বা ক্রস ব্রাউজারের সামঞ্জস্যের নয়।

আপনি যখন ফলাফলটি ব্যবহারকারীকে দেখাতে চান সেই পরিস্থিতিতে, .toLocaleString () পদ্ধতি আপনাকে আপনার ওয়েবসাইট বা অ্যাপের ব্যবহারকারীর সাথে (তার ভাষা যেই হোক না কেন) একই ভাষায় কথা বলতে পরাশক্তি দেয়।

ইসমাস্ক্রিপ্ট ডকুমেন্টেশন অনুসারে এই পদ্ধতিটি ১৯৯৯ সালে প্রবর্তিত হয়েছিল এবং আমি বিশ্বাস করি যে এর কারণটি আশা করা হয়েছিল যে কোনও এক সময়ে ইন্টারনেট সারা বিশ্বের মানুষকে সংযুক্ত করবে, সুতরাং কিছু "অভ্যন্তরীণকরণ" সরঞ্জামের প্রয়োজন ছিল।

আজ ইন্টারনেট আমাদের সকলকে সংযুক্ত করে, সুতরাং, এটি মনে রাখা গুরুত্বপূর্ণ যে পৃথিবী এমন একতর জটিল যেটি আমরা কল্পনাও করতে পারি এবং যে (/ প্রায়) আমরা সবাই এখানে আছি ইন্টারনেটে ।

স্পষ্টতই, মানুষের বৈচিত্র্য বিবেচনা করে, প্রত্যেকের জন্য নিখুঁত ইউএক্সের গ্যারান্টি দেওয়া অসম্ভব কারণ আমরা বিভিন্ন ভাষায় কথা বলি, বিভিন্ন জিনিসকে মূল্য দিতে পারি এবং ঠিক এর কারণ হিসাবে, জিনিসগুলি যতটা সম্ভব স্থানীয়করণের চেষ্টা করা আরও বেশি গুরুত্বপূর্ণ ।

সুতরাং, তারিখ, সময়, সংখ্যা ইত্যাদির উপস্থাপনের জন্য কিছু নির্দিষ্ট মান আছে এবং এটি বিবেচনা করে যে চূড়ান্ত ব্যবহারকারীর পছন্দসই বিন্যাসে আমাদের সেই জিনিসগুলি প্রদর্শনের একটি সরঞ্জাম রয়েছে, তা বিরল এবং প্রায় দায়িত্বজ্ঞানহীন নয় সেই সরঞ্জামটি ব্যবহার করুন (বিশেষত পরিস্থিতিতে যখন আমরা ব্যবহারকারীর কাছে এই ডেটা প্রদর্শন করতে চাই)?

আমার জন্য, জাতির স্ক্রিপ্ট সহ একটি ক্লক অ্যাপ্লিকেশন তৈরি করা এবং এটিকে হার্ড-কোডিংয়ের মতো কিছুটা লাগার মতো পরিস্থিতিগুলিতে .toLocaleString () এর পরিবর্তে RegExp ব্যবহার করা যাতে এটি কেবল প্রাগ সময় প্রদর্শন করবে (যা বেশ কার্যকর নয়) প্রাগে বাস করেন না এমন লোকেরা) যদিও এর ডিফল্ট আচরণ

new Date();

চূড়ান্ত ব্যবহারকারীর ঘড়ি অনুযায়ী ডেটা ফিরিয়ে আনতে হয়।


কেন আপনি কনস্ট্যান্ড এবং => দিয়ে ফাংশনটি লিখলেন?
ওজি শান

@ ওজিসিয়ান আমি সর্বদা এটি করি যেহেতু এটি ভেরিয়েবল এবং ফাংশনগুলি ঘোষণার সবচেয়ে সুবিধাজনক উপায়। এছাড়াও, আমি মনে করি এটি কোড ক্লিনার এবং আরও ছোট রাখতে সহায়তা করে।
ইগোর বাইকভ

4

আমার " সত্য " নিয়মিত-এক্সপ্রেশন-কেবলমাত্র সেই ওয়ান-লাইনারদের জন্যই সমাধান

আপনি কি উপরে উত্সাহী খেলোয়াড়দের দেখতে পাচ্ছেন? আপনি এটি থেকে গল্ফ করতে পারেন। এখানে আমার স্ট্রোক।

n => `${n}`.replace(/(?<!\.\d+)\B(?=(\d{3})+\b)/g, " ").replace(/(?<=\.(\d{3})+)\B/g, " ")

ব্যবহার একটি সরু স্পেস একটি সহস্র বিভাজক জন্য (U + এ 2009), যেমন ইউনিট ইন্টারন্যাশনাল সিস্টেম না বললেন অষ্টম সংস্করণ (2006) তাদের প্রকাশনার " এসআই প্রচারপত্র: ইউনিট ইন্টারন্যাশনাল সিস্টেম (এসআই) " (দেখুন §5.3 .4।)। নবম সংস্করণ (2019) এর জন্য একটি স্থান ব্যবহার করার পরামর্শ দেয় (দেখুন §5.4.4))। কমা সহ আপনি যা খুশি তা ব্যবহার করতে পারেন।


দেখা.

const integer_part_only = n => `${n}`.replace(/(?<!\.\d+)\B(?=(\d{3})+\b)/g, " I ");
const fractional_part_only = n => `${n}`.replace(/(?<=\.(\d{3})+)\B/g, " F ");
const both = n => fractional_part_only(integer_part_only(n));

function demo(number) { // I’m using Chrome 74.
	console.log(`${number}
		 "${integer_part_only(number)}" (integer part only)
		 "${fractional_part_only(number)}" (fractional part only)
		 "${both(number)}" (both)
	`);
}
demo(Math.random() * 10e5);
demo(123456789.01234567);
demo(123456789);
demo(0.0123456789);


এটা কিভাবে কাজ করে?

একটি পূর্ণসংখ্যার অংশ জন্য

.replace(/(?<!\.\d+)\B(?=(\d{3})+\b)/g, " I ")
  • .replace(……, " I ") "আমি" রাখুন
    • /……/g প্রতিটি
      • \B দুটি সংলগ্ন অঙ্কের মধ্যবর্তী
        • (?=……)পজিটিভ লুকাহেড যার ডান অংশ
          • (\d{3})+ এক বা একাধিক তিন অঙ্কের অংশগুলি
          • \b অ-অঙ্কের পরে, যেমন, একটি সময়কাল, স্ট্রিংয়ের সমাপ্তি, ইত্যাদি
        • (?<!……)নেজিটিভ লুকবাইন্ডযার বাম অংশ বাদে
          • \.\d+ অঙ্কগুলি হ'ল অঙ্কগুলি অনুসরণ করে ("একটি দশমিক বিভাজক রয়েছে")।

দশমিক অংশের জন্য

.replace(/(?<=\.(\d{3})+)\B/g, " F ")
  • .replace(……, " F ") "এফ" রাখুন
    • /……/g প্রতিটি
      • \B দুটি সংলগ্ন অঙ্কের মধ্যবর্তী
        • (?<=……)পজিটিভ লুকবাইন্ড যার বাম অংশ
          • \. একটি দশমিক বিভাজক
          • (\d{3})+ এক বা একাধিক তিন-অঙ্ক বিশৃঙ্খলা অনুসরণ করে।

চরিত্রের ক্লাস এবং সীমানা

\d

যেকোন অঙ্কের সাথে মিল রয়েছে (আরবি সংখ্যা)। সমান [0-9]

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

  • /\d/বা /[0-9]/ম্যাচ 2মধ্যে B2 is the suite number

\b

একটি শব্দ সীমানা মেলে । এটি এমন একটি অবস্থান যেখানে কোনও শব্দের অক্ষর অন্য শব্দ-অক্ষর দ্বারা অনুসরণ করা হয় না বা তার আগে হয় না, যেমন একটি চিঠি এবং একটি স্থানের মধ্যে। নোট করুন যে ম্যাচের শব্দের সীমানা ম্যাচে অন্তর্ভুক্ত নয়। অন্য কথায়, মিলে যাওয়া শব্দের বাউন্ডারের দৈর্ঘ্য শূন্য।

উদাহরণ:

  • /\bm/ম্যাচ mমধ্যে moon;
  • /oo\b/এর সাথে মেলে ooনা moon, কারণ ooএর পরে nযা শব্দের চরিত্র;
  • /oon\b/ম্যাচ oonমধ্যে moon, কারণ oonস্ট্রিংয়ের শেষ প্রান্ত, এইভাবে একটি শব্দ অক্ষর দ্বারা অনুসৃত নয়;
  • /\w\b\w/ কখনই কোনও কিছুর সাথে মেলে না, কারণ একটি শব্দ অক্ষর কখনই একটি অ-শব্দ এবং শব্দের অক্ষর উভয়ই অনুসরণ করতে পারে না।

\B

একটি শব্দহীন সীমানা মেলে । এটি এমন একটি অবস্থান যেখানে পূর্ববর্তী এবং পরবর্তী অক্ষর একই ধরণের হয়: উভয়ই শব্দ হতে হবে, অথবা উভয়ই অ-শব্দের হতে হবে। যেমন দুটি বর্ণের মধ্যে বা দুটি স্থানের মধ্যে। একটি স্ট্রিংয়ের শুরু এবং শেষটিকে অ-শব্দের হিসাবে বিবেচনা করা হয়। ম্যাচ শব্দের সীমানা হিসাবে একই, ম্যাচযুক্ত নন-ওয়ার্ড বাউন্ডারিটিও ম্যাচে অন্তর্ভুক্ত নয়।

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

  • /\Bon/ম্যাচ onমধ্যে at noon;
  • /ye\B/ম্যাচ yeমধ্যে possibly yesterday

ব্রাউজার সামঞ্জস্য


3

আমি আকি 143 এস এর সমাধানটিতে টফিক্সড যুক্ত করেছি । এই দ্রষ্টব্যটিতে নির্ভুলতার জন্য কয়েক হাজার বিভাজক এবং কমা ব্যবহার করা হয়।

function formatNumber( num, fixed ) { 
    var decimalPart;

    var array = Math.floor(num).toString().split('');
    var index = -3; 
    while ( array.length + index > 0 ) { 
        array.splice( index, 0, '.' );              
        index -= 4;
    }

    if(fixed > 0){
        decimalPart = num.toFixed(fixed).split(".")[1];
        return array.join('') + "," + decimalPart; 
    }
    return array.join(''); 
};

উদাহরণ;

formatNumber(17347, 0)  = 17.347
formatNumber(17347, 3)  = 17.347,000
formatNumber(1234563.4545, 3)  = 1.234.563,454

3

ইতিমধ্যে অনেক ভাল উত্তর। এখানে অন্যটি, কেবল মজাদার জন্য:

function format(num, fix) {
    var p = num.toFixed(fix).split(".");
    return p[0].split("").reduceRight(function(acc, num, i, orig) {
        if ("-" === num && 0 === i) {
            return num + acc;
        }
        var pos = orig.length - i - 1
        return  num + (pos && !(pos % 3) ? "," : "") + acc;
    }, "") + (p[1] ? "." + p[1] : "");
}

কিছু উদাহরণ:

format(77.03453, 2); // "77.03"
format(78436589374); // "78,436,589,374"
format(784, 4);      // "784.0000"
format(-123456);     // "-123,456"

format(-123456)এটি যা দেয় তার সাথে এটি কাজ করে না-,123,456
wrossmck

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