আমি জাভাস্ক্রিপ্ট একটি মূল্য বিন্যাস করতে চাই। আমি একটি ফাংশন চাই যা float
একটি আর্গুমেন্ট হিসাবে গ্রহণ করে এবং এর string
মতো ফর্ম্যাট দেয়:
"$ 2,500.00"
এটি করার সর্বোত্তম উপায় কী?
আমি জাভাস্ক্রিপ্ট একটি মূল্য বিন্যাস করতে চাই। আমি একটি ফাংশন চাই যা float
একটি আর্গুমেন্ট হিসাবে গ্রহণ করে এবং এর string
মতো ফর্ম্যাট দেয়:
"$ 2,500.00"
এটি করার সর্বোত্তম উপায় কী?
উত্তর:
এই সমাধানটি প্রতিটি একক বড় ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ:
const profits = 2489.8237;
profits.toFixed(3) //returns 2489.824 (rounds up)
profits.toFixed(2) //returns 2489.82
profits.toFixed(7) //returns 2489.8237000 (pads the decimals)
আপনার যা দরকার তা হ'ল মুদ্রা প্রতীক যুক্ত করা (উদাঃ "$" + profits.toFixed(2)
) এবং আপনার পরিমাণ ডলারে থাকবে।
আপনার যদি ,
প্রতিটি ডিজিটের মধ্যে ব্যবহারের প্রয়োজন হয় তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন:
function formatMoney(number, decPlaces, decSep, thouSep) {
decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces,
decSep = typeof decSep === "undefined" ? "." : decSep;
thouSep = typeof thouSep === "undefined" ? "," : thouSep;
var sign = number < 0 ? "-" : "";
var i = String(parseInt(number = Math.abs(Number(number) || 0).toFixed(decPlaces)));
var j = (j = i.length) > 3 ? j % 3 : 0;
return sign +
(j ? i.substr(0, j) + thouSep : "") +
i.substr(j).replace(/(\decSep{3})(?=\decSep)/g, "$1" + thouSep) +
(decPlaces ? decSep + Math.abs(number - i).toFixed(decPlaces).slice(2) : "");
}
document.getElementById("b").addEventListener("click", event => {
document.getElementById("x").innerText = "Result was: " + formatMoney(document.getElementById("d").value);
});
<label>Insert your amount: <input id="d" type="text" placeholder="Cash amount" /></label>
<br />
<button id="b">Get Output</button>
<p id="x">(press button to get output)</p>
এটি এর মতো ব্যবহার করুন:
(123456789.12345).formatMoney(2, ".", ",");
আপনি যদি সর্বদা ব্যবহার করতে যাচ্ছেন তবে। ' এবং ',', আপনি তাদের আপনার মেথড কলটি ছেড়ে দিতে পারেন, এবং পদ্ধতিটি সেগুলি আপনার জন্য ডিফল্ট করবে।
(123456789.12345).formatMoney(2);
যদি আপনার সংস্কৃতিতে দুটি চিহ্ন সজ্জিত হয় (অর্থাত ইউরোপীয়রা) এবং আপনি ডিফল্ট ব্যবহার করতে চান তবে কেবল formatMoney
পদ্ধতিটিতে নিম্নলিখিত দুটি লাইনটি পেস্ট করুন :
d = d == undefined ? "," : d,
t = t == undefined ? "." : t,
আপনি যদি আধুনিক ইসসিএমএসক্রিপ্ট সিনট্যাক্স ব্যবহার করতে পারেন (যেমন বাবেলের মাধ্যমে), আপনি পরিবর্তে এই আরও সহজ ফাংশনটি ব্যবহার করতে পারেন:
function formatMoney(amount, decimalCount = 2, decimal = ".", thousands = ",") {
try {
decimalCount = Math.abs(decimalCount);
decimalCount = isNaN(decimalCount) ? 2 : decimalCount;
const negativeSign = amount < 0 ? "-" : "";
let i = parseInt(amount = Math.abs(Number(amount) || 0).toFixed(decimalCount)).toString();
let j = (i.length > 3) ? i.length % 3 : 0;
return negativeSign + (j ? i.substr(0, j) + thousands : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands) + (decimalCount ? decimal + Math.abs(amount - i).toFixed(decimalCount).slice(2) : "");
} catch (e) {
console.log(e)
}
};
document.getElementById("b").addEventListener("click", event => {
document.getElementById("x").innerText = "Result was: " + formatMoney(document.getElementById("d").value);
});
<label>Insert your amount: <input id="d" type="text" placeholder="Cash amount" /></label>
<br />
<button id="b">Get Output</button>
<p id="x">(press button to get output)</p>
d
এবং t
হতে .
এবং ,
যথাক্রমে যাতে আপনি আছে না যে তাদের প্রত্যেক সময় নির্দিষ্ট করার। এছাড়াও, আমি return
পড়ার জন্য বিবৃতিটির শুরুটি সংশোধন করার পরামর্শ দিচ্ছি : return s + '$' + [rest]
অন্যথায় আপনি ডলার সাইন পাবেন না।
জাভাস্ক্রিপ্টের একটি নম্বর বিন্যাসক রয়েছে (আন্তর্জাতিকীকরণের API এর অংশ)।
// Create our number formatter.
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
formatter.format(2500); /* $2,500.00 */
ব্যবহারের undefined
প্রথম আর্গুমেন্ট (স্থানে 'en-US'
উদাহরণে) সিস্টেম লোকেল (ব্যবহারকারী লোকেল ক্ষেত্রে কোড একটি ব্রাউজারে চলছে) ব্যবহার করতে। লোকেল কোডটির আরও ব্যাখ্যা ।
মুদ্রা কোডগুলির একটি তালিকা এখানে ।
বয়স্কদের সাথে এটির তুলনা একটি চূড়ান্ত নোট। toLocaleString
। তারা উভয়ই একই কার্যকারিতা সরবরাহ করে। যাইহোক, ToLocaleString এর পুরানো অবতারগুলিতে (প্রি-ইন্টেল) আসলে লোকেলগুলি সমর্থন করে না : এটি সিস্টেমের লোকেল ব্যবহার করে। সুতরাং, নিশ্চিত হয়ে নিন যে আপনি সঠিক সংস্করণটি ব্যবহার করছেন ( MDN এর অস্তিত্বের জন্য যাচাই করার পরামর্শ দেয়Intl
)। এছাড়াও, উভয়ের পারফরম্যান্স একক আইটেমের জন্য একই , তবে আপনার যদি ফর্ম্যাট করতে প্রচুর সংখ্যা থাকে তবে তা ব্যবহার করে Intl.NumberFormat
~ 70 গুণ দ্রুত হয়। এখানে কীভাবে ব্যবহার করবেন toLocaleString
:
(2500).toLocaleString('en-US', {
style: 'currency',
currency: 'USD',
}); /* $2,500.00 */
(12345.67).toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,'); // 12,345.67
এই সমাধানের পিছনে ধারণাটি প্রথম মিল এবং কমা দিয়ে মিলিত বিভাগগুলি প্রতিস্থাপন করছে '$&,'
। মিলটি লুকোয়াদ অ্যাপ্রোচ ব্যবহার করে করা হয় । আপনি "একটি সংখ্যার সাথে তিনটি সংখ্যার সেট (এক বা একাধিক) এবং একটি বিন্দুর ক্রম অনুসরণ করলে" এই সংজ্ঞাটি পড়তে পারেন ।
পরীক্ষা:
1 --> "1.00"
12 --> "12.00"
123 --> "123.00"
1234 --> "1,234.00"
12345 --> "12,345.00"
123456 --> "123,456.00"
1234567 --> "1,234,567.00"
12345.67 --> "12,345.67"
ডেমো: http://jsfiddle.net/hAfMM/9571/
Number
দশমিকের সংখ্যা [0 .. n]
এবং সংখ্যা গোষ্ঠীর আকারের অতিরিক্ত সমর্থন যুক্ত করতে আপনি অবজেক্টের প্রোটোটাইপও প্রসারিত করতে পারেন [0 .. x]
:
/**
* Number.prototype.format(n, x)
*
* @param integer n: length of decimal
* @param integer x: length of sections
*/
Number.prototype.format = function(n, x) {
var re = '\\d(?=(\\d{' + (x || 3) + '})+' + (n > 0 ? '\\.' : '$') + ')';
return this.toFixed(Math.max(0, ~~n)).replace(new RegExp(re, 'g'), '$&,');
};
1234..format(); // "1,234"
12345..format(2); // "12,345.00"
123456.7.format(3, 2); // "12,34,56.700"
123456.789.format(2, 4); // "12,3456.79"
ডেমো / টেস্টস: http://jsfiddle.net/hAfMM/435/
এই সুপার এক্সটেন্ডেড সংস্করণে আপনি বিভিন্ন ডিলিমিটার প্রকার সেট করতে পারেন:
/**
* Number.prototype.format(n, x, s, c)
*
* @param integer n: length of decimal
* @param integer x: length of whole part
* @param mixed s: sections delimiter
* @param mixed c: decimal delimiter
*/
Number.prototype.format = function(n, x, s, c) {
var re = '\\d(?=(\\d{' + (x || 3) + '})+' + (n > 0 ? '\\D' : '$') + ')',
num = this.toFixed(Math.max(0, ~~n));
return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), '$&' + (s || ','));
};
12345678.9.format(2, 3, '.', ','); // "12.345.678,90"
123456.789.format(4, 4, ' ', ':'); // "12 3456:7890"
12345678.9.format(0, 3, '-'); // "12-345-679"
ডেমো / টেস্টস: http://jsfiddle.net/hAfMM/612/
.replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,")
।
Number.prototype.toMoney = (decimal=2) -> @toFixed(decimal).replace /(\d)(?=(\d{3})+(?:\.\d+)?$)/g, "$1,"
\.
সঙ্গে $
(লাইন শেষে), অর্থাৎ this.toFixed(0).replace(/(\d)(?=(\d{3})+$)/g, "$1,")
।
$1,
। মিলটি লুকোয়াদ অ্যাপ্রোচ ব্যবহার করে করা হয় । আপনি "একটি সংখ্যার সাথে তিনটি সংখ্যার সেট (এক বা একাধিক) এবং একটি বিন্দুর ক্রমিক অনুসরণ করলে" এটি একটি সংখ্যার সাথে মেলে হিসাবে প্রকাশ করতে পারেন ।
জাভাস্ক্রিপ্ট নম্বর অবজেক্টটি একবার দেখুন এবং দেখুন এটি আপনাকে সহায়তা করতে পারে কিনা।
toLocaleString()
অবস্থান নির্দিষ্ট হাজার বিভাজক ব্যবহার করে একটি সংখ্যা বিন্যাস করবে। toFixed()
দশমিক স্থানে নির্দিষ্ট সংখ্যায় গোল করবে।এগুলি একই সময়ে ব্যবহার করতে মানটির প্রকারটি অবশ্যই একটি সংখ্যায় ফিরে যেতে হবে কারণ তারা উভয়ই একটি স্ট্রুপ আউটপুট করে।
উদাহরণ:
Number((someNumber).toFixed(1)).toLocaleString()
toLocaleString
সিস্টেম লোকেল ব্যবহার করে এমন একটি পুরাতন সংস্করণ রয়েছে এবং ECMAScript Intl API থেকে আসে এমন একটি নতুন (বেমানান)। এখানে ব্যাখ্যা করা হয়েছে । এই উত্তরটি পুরানো সংস্করণের জন্য উদ্দিষ্ট বলে মনে হচ্ছে।
নীচে প্যাট্রিক দেশজার্ডিনস (ওরফে ডওক) কোডটিতে কিছু মন্তব্য যুক্ত করা হয়েছে এবং কিছু ছোটখাটো পরিবর্তন রয়েছে:
/*
decimal_sep: character used as deciaml separtor, it defaults to '.' when omitted
thousands_sep: char used as thousands separator, it defaults to ',' when omitted
*/
Number.prototype.toMoney = function(decimals, decimal_sep, thousands_sep)
{
var n = this,
c = isNaN(decimals) ? 2 : Math.abs(decimals), //if decimal is zero we must take it, it means user does not want to show any decimal
d = decimal_sep || '.', //if no decimal separator is passed we use the dot as default decimal separator (we MUST use a decimal separator)
/*
according to [/programming/411352/how-best-to-determine-if-an-argument-is-not-sent-to-the-javascript-function]
the fastest way to check for not defined parameter is to use typeof value === 'undefined'
rather than doing value === undefined.
*/
t = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep, //if you don't want to use a thousands separator you can pass empty string as thousands_sep value
sign = (n < 0) ? '-' : '',
//extracting the absolute value of the integer part of the number and converting to string
i = parseInt(n = Math.abs(n).toFixed(c)) + '',
j = ((j = i.length) > 3) ? j % 3 : 0;
return sign + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');
}
এবং এখানে কিছু পরীক্ষা:
//some tests (do not forget parenthesis when using negative numbers and number with no decimals)
alert(123456789.67392.toMoney() + '\n' + 123456789.67392.toMoney(3) + '\n' + 123456789.67392.toMoney(0) + '\n' + (123456).toMoney() + '\n' + (123456).toMoney(0) + '\n' + 89.67392.toMoney() + '\n' + (89).toMoney());
//some tests (do not forget parenthesis when using negative numbers and number with no decimals)
alert((-123456789.67392).toMoney() + '\n' + (-123456789.67392).toMoney(-3));
ছোটখাটো পরিবর্তনগুলি হ'ল:
Math.abs(decimals)
যখন না হয় তখন কিছুটা সরানো হবে NaN
।
decimal_sep
খালি স্ট্রিং আর হতে পারে না (এক প্রকারের দশমিক বিভাজক হওয়া আবশ্যক)
জাভাস্ক্রিপ্ট ফাংশনে কোনও আর্গুমেন্ট না প্রেরণ করা হয়েছে কি না তা নির্ধারণ করার জন্য আমরা কতটাtypeof thousands_sep === 'undefined'
প্রস্তাবিত তা ব্যবহার করি
(+n || 0)
প্রয়োজন হয় না কারণ this
একটি Number
বস্তু
parseInt
সংখ্যা পূর্ণসংখ্যা অংশ পরম মূল্যের ওপর বলা হয়। ইন্টিগের অংশটি জিরো দিয়ে শুরু করা যাবে না যতক্ষণ না এটি কেবল একটি শূন্য! এবং parseInt(0) === 0
হয় অষ্টাল বা দশমিক।
0
দ্বারা বিবেচিত হয় parseInt
। তবে এই কোডটিতে ইনপুট (বা অন্য কোনও অক্টাল ফর্ম্যাট মান) হিসাবে parseInt
গ্রহণের জন্য IMPOSSIBLE 016
, কারণ এতে আর্গুমেন্টটি কার্যক্রমে parseInt
প্রক্রিয়াজাত হয় 1st ম Math.abs
। সুতরাং parseInt
শূন্য দিয়ে শুরু হওয়া সংখ্যাটি পাওয়ার কোনও উপায় নেই যদি না এটি কেবল একটি শূন্য বা 0.nn
যেখানে nn
দশমিক হয় are তবে স্ট্রিং 0
এবং 0.nn
স্ট্রিং উভয়ই parseInt
সাদামাটা শূন্যে রূপান্তরিত হবে বলে মনে করা হয়েছে।
অ্যাকাউন্টিং.জেএস সংখ্যা, অর্থ এবং মুদ্রার বিন্যাসের জন্য একটি ক্ষুদ্র জাভাস্ক্রিপ্ট লাইব্রেরি।
পরিমাণ একটি সংখ্যা হয়, তাহলে বলতে -123
হলে,
amount.toLocaleString('en-US', { style: 'currency', currency: 'USD' });
স্ট্রিং উত্পাদন করবে "-$123.00"
।
এখানে একটি সম্পূর্ণ কাজের উদাহরণ ।
minimumFractionDigits: 0
এখানে আমি দেখেছি সেরা জেএস মানি ফর্ম্যাটর:
Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator) {
var n = this,
decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces,
decSeparator = decSeparator == undefined ? "." : decSeparator,
thouSeparator = thouSeparator == undefined ? "," : thouSeparator,
sign = n < 0 ? "-" : "",
i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
j = (j = i.length) > 3 ? j % 3 : 0;
return sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};
এটি পুনরায় ফর্ম্যাট এবং এখান থেকে ধার করা হয়েছিল: https://stackoverflow.com/a/149099/751484
আপনাকে আপনার নিজস্ব মুদ্রা ডিজাইনার সরবরাহ করতে হবে (আপনি উপরে ব্যবহার করেছেন)।
এটি এটিকে কল করুন (যদিও নোট করুন যে আরোগুলিগুলি 2, কমা এবং সময়সীমার মধ্যে ডিফল্ট হয়, সুতরাং আপনার পছন্দ যদি আপনার কোনও আরোগুলি সরবরাহ করার প্রয়োজন হয় না):
var myMoney=3543.75873;
var formattedMoney = '$' + myMoney.formatMoney(2,',','.'); // "$3,543.76"
var
বিবৃতিতে আছেন ।
এখানে ইতিমধ্যে কিছু দুর্দান্ত উত্তর রয়েছে। এখানে আরও একটি চেষ্টা করা হয়েছে, কেবল মজাদার জন্য:
function formatDollar(num) {
var p = num.toFixed(2).split(".");
return "$" + p[0].split("").reverse().reduce(function(acc, num, i, orig) {
return num=="-" ? acc : num + (i && !(i % 3) ? "," : "") + acc;
}, "") + "." + p[1];
}
এবং কিছু পরীক্ষা:
formatDollar(45664544.23423) // "$45,664,544.23"
formatDollar(45) // "$45.00"
formatDollar(123) // "$123.00"
formatDollar(7824) // "$7,824.00"
formatDollar(1) // "$1.00"
সম্পাদিত: এখন এটি নেতিবাচক সংখ্যাগুলিও পরিচালনা করবে
i = orig.length - i - 1
কলব্যাকের মতো আপনাকে কিছু করা দরকার । তবুও, অ্যারের আরও একটি ট্র্যাভারসাল।
reduce
পদ্ধতিটি বাস্তু স্ক্রিপ্ট ১.৮ এ প্রবর্তিত হয়েছিল এবং এটি ইন্টারনেট এক্সপ্লোরার ৮ এবং এর নীচে সমর্থিত নয়।
সমস্ত বর্তমান ব্রাউজারের জন্য কাজ করে
toLocaleString
ভাষা-সংবেদনশীল উপস্থাপনায় একটি মুদ্রাকে ফর্ম্যাট করতে ব্যবহার করুন ( আইএসও 4217 মুদ্রা কোড ব্যবহার করে )।
(2500).toLocaleString("en-GB", {style: "currency", currency: "GBP", minimumFractionDigits: 2})
উদাহরণস্বরূপ @ ওয়েভেনমোরের জন্য দক্ষিণ আফ্রিকার র্যান্ড কোড স্নিপেট
console.log((2500).toLocaleString("en-ZA", {style: "currency", currency: "ZAR", minimumFractionDigits: 2}))
// -> R 2 500,00
console.log((2500).toLocaleString("en-GB", {style: "currency", currency: "ZAR", minimumFractionDigits: 2}))
// -> ZAR 2,500.00
আমার মনে হয় আপনি যা চান তা f.nettotal.value = "$" + showValue.toFixed(2);
Numeral.js - @adamwdraper দ্বারা সহজ সংখ্যার ফর্ম্যাটিংয়ের জন্য একটি জেএস লাইব্রেরি
numeral(23456.789).format('$0,0.00'); // = "$23,456.79"
ঠিক আছে, আপনি যা বলেছিলেন তার উপর ভিত্তি করে, আমি এটি ব্যবহার করছি:
var DecimalSeparator = Number("1.2").toLocaleString().substr(1,1);
var AmountWithCommas = Amount.toLocaleString();
var arParts = String(AmountWithCommas).split(DecimalSeparator);
var intPart = arParts[0];
var decPart = (arParts.length > 1 ? arParts[1] : '');
decPart = (decPart + '00').substr(0,2);
return '£ ' + intPart + DecimalSeparator + decPart;
আমি উন্নতির পরামর্শের জন্য উন্মুক্ত (আমি কেবল এটি করার জন্য YUI অন্তর্ভুক্ত করতে পছন্দ করব না :-)) আমি ইতিমধ্যে জানি যে আমার "সনাক্তকরণ করা উচিত" "" এটি কেবলমাত্র দশমিক বিভাজক হিসাবে ব্যবহার করার পরিবর্তে ...
আমি লাইব্রেরি গ্লোবালাইজ (মাইক্রোসফ্ট থেকে) ব্যবহার করি :
সংখ্যা, মুদ্রা এবং তারিখগুলি স্থানীয়করণ এবং ব্যবহারকারীর লোকেল অনুসারে সেগুলি স্বয়ংক্রিয়ভাবে সঠিকভাবে ফর্ম্যাটেড করা একটি দুর্দান্ত প্রকল্প! ... এবং এটি jQuery এক্সটেনশন হওয়া সত্ত্বেও এটি বর্তমানে একটি 100% স্বতন্ত্র গ্রন্থাগার। আপনারা সবাইকে চেষ্টা করে দেখুন! :)
জাভাস্ক্রিপ্ট-নম্বর-ফর্ম্যাটার (পূর্বে গুগল কোডে )
#,##0.00
বা প্রত্যাখ্যান সহ স্ট্যান্ডার্ড নম্বর ফর্ম্যাটিং গ্রহণ করুন -000.####
।# ##0,00
, #,###.##
, #'###.##
বা কোনো অ সংখ্যায়ন প্রতীকের প্রকার।#,##,#0.000
বা #,###0.##
সমস্ত বৈধ।##,###,##.#
বা 0#,#00#.###0#
সব ঠিক আছে।format( "0.0000", 3.141592)
।(এর README থেকে উদ্ধৃতি)
মূল পদ্ধতিটি সরবরাহ করার জন্য জোনাথন এমকে +1 করুন। যেহেতু এটি সুস্পষ্টভাবে একটি মুদ্রার বিন্যাসক, তাই আমি এগিয়ে গিয়ে আউটপুটে মুদ্রা প্রতীক ('$' এর ডিফল্ট) যুক্ত করেছি এবং কয়েক হাজার বিভাজক হিসাবে একটি ডিফল্ট কমা যুক্ত করেছি। আপনি যদি আসলে কোনও মুদ্রার প্রতীক (বা হাজার হাজার বিভাজক) না চান তবে এটির পক্ষে যুক্তি হিসাবে কেবল "" (খালি স্ট্রিং) ব্যবহার করুন।
Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator, currencySymbol) {
// check the args and supply defaults:
decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces;
decSeparator = decSeparator == undefined ? "." : decSeparator;
thouSeparator = thouSeparator == undefined ? "," : thouSeparator;
currencySymbol = currencySymbol == undefined ? "$" : currencySymbol;
var n = this,
sign = n < 0 ? "-" : "",
i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
j = (j = i.length) > 3 ? j % 3 : 0;
return sign + currencySymbol + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};
+n || 0
একমাত্র জিনিস যা কিছুটা অদ্ভুত বলে মনে হয় (যাইহোক আমার কাছে)।
this
একটি পুরোপুরি দরকারী পরিবর্তনশীল নাম। এটিকে রূপান্তর করা n
যাতে আপনি সংজ্ঞা সময়ে 3 টি অক্ষর সংরক্ষণ করতে পারেন এমন কোনও যুগে র্যাম এবং ব্যান্ডউইথকে কেবিতে গণনা করা প্রয়োজন হতে পারে, তবে কোনও যুগে মিনিফায়ার কেবল তখনই আবশ্যক হয় যখন উত্পাদন হিট হওয়ার আগে মিনিফায়ার তার সমস্ত যত্ন নেবে। অন্যান্য চালাক মাইক্রো-অপ্টিমাইজেশন কমপক্ষে বিতর্কযোগ্য।
পিএইচপি ফাংশন "নাম্বার_ ফর্ম্যাট" এর একটি জাভাস্ক্রিপ্ট পোর্ট রয়েছে।
পিএইচপি বিকাশকারীদের পক্ষে এটি ব্যবহার করা সহজ এবং স্বীকৃত হিসাবে আমি এটি খুব দরকারী বলে মনে করি।
function number_format (number, decimals, dec_point, thousands_sep) {
var n = number, prec = decimals;
var toFixedFix = function (n,prec) {
var k = Math.pow(10,prec);
return (Math.round(n*k)/k).toString();
};
n = !isFinite(+n) ? 0 : +n;
prec = !isFinite(+prec) ? 0 : Math.abs(prec);
var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec);
//fix for IE parseFloat(0.55).toFixed(0) = 0;
var abs = toFixedFix(Math.abs(n), prec);
var _, i;
if (abs >= 1000) {
_ = abs.split(/\D/);
i = _[0].length % 3 || 3;
_[0] = s.slice(0,i + (n < 0)) +
_[0].slice(i).replace(/(\d{3})/g, sep+'$1');
s = _.join(dec);
} else {
s = s.replace('.', dec);
}
var decPos = s.indexOf(dec);
if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
}
else if (prec >= 1 && decPos === -1) {
s += dec+new Array(prec).join(0)+'0';
}
return s;
}
( উদাহরণ থেকে নিচে অন্তর্ভুক্ত মূল এবং কমেন্টের জন্য মন্তব্য অন্তর্ভুক্ত যেখানে ব্লক )
// Formats a number with grouped thousands
//
// version: 906.1806
// discuss at: http://phpjs.org/functions/number_format
// + 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)
// * 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'
একটি সংক্ষিপ্ত পদ্ধতি (স্থান, কমা বা পয়েন্ট সন্নিবেশ করার জন্য) নিয়মিত অভিব্যক্তি সহ?
Number.prototype.toCurrencyString=function(){
return this.toFixed(2).replace(/(\d)(?=(\d{3})+\b)/g,'$1 ');
}
n=12345678.9;
alert(n.toCurrencyString());
এরকম কিছু দেখেনি। এটি বেশ সংক্ষিপ্ত এবং বুঝতে সহজ।
function moneyFormat(price, sign = '$') {
const pieces = parseFloat(price).toFixed(2).split('')
let ii = pieces.length - 3
while ((ii-=3) > 0) {
pieces.splice(ii, 0, ',')
}
return sign + pieces.join('')
}
console.log(
moneyFormat(100),
moneyFormat(1000),
moneyFormat(10000.00),
moneyFormat(1000000000000000000)
)
বিভিন্ন লোকাল ফর্ম্যাটে বিভিন্ন মুদ্রাকে ফর্ম্যাট করার অনুমতি দেওয়ার জন্য এখানে চূড়ান্ত আউটপুটে আরও বিকল্পগুলির একটি সংস্করণ রয়েছে।
// higher order function that takes options then a price and will return the formatted price
const makeMoneyFormatter = ({
sign = '$',
delimiter = ',',
decimal = '.',
append = false,
precision = 2,
round = true,
custom
} = {}) => value => {
const e = [1, 10, 100, 1000, 10000, 100000, 1000000, 10000000]
value = round
? (Math.round(value * e[precision]) / e[precision])
: parseFloat(value)
const pieces = value
.toFixed(precision)
.replace('.', decimal)
.split('')
let ii = pieces.length - (precision ? precision + 1 : 0)
while ((ii-=3) > 0) {
pieces.splice(ii, 0, delimiter)
}
if (typeof custom === 'function') {
return custom({
sign,
float: value,
value: pieces.join('')
})
}
return append
? pieces.join('') + sign
: sign + pieces.join('')
}
// create currency converters with the correct formatting options
const formatDollar = makeMoneyFormatter()
const formatPound = makeMoneyFormatter({
sign: '£',
precision: 0
})
const formatEuro = makeMoneyFormatter({
sign: '€',
delimiter: '.',
decimal: ',',
append: true
})
const customFormat = makeMoneyFormatter({
round: false,
custom: ({ value, float, sign }) => `SALE:$${value}USD`
})
console.log(
formatPound(1000),
formatDollar(10000.0066),
formatEuro(100000.001),
customFormat(999999.555)
)
প্যাট্রিক দেশজার্ডিন্সের উত্তরটি দেখতে ভাল লাগছে তবে আমি আমার জাভাস্ক্রিপ্টটিকে সহজ পছন্দ করি। এখানে একটি ফাংশন আমি স্রেফ লিখেছিলাম যাতে একটি নম্বর নিতে এবং এটি মুদ্রার ফর্ম্যাটে ফিরিয়ে দেওয়া হয় (মাইনাস ডলারের চিহ্ন)
// Format numbers to two decimals with commas
function formatDollar(num) {
var p = num.toFixed(2).split(".");
var chars = p[0].split("").reverse();
var newstr = '';
var count = 0;
for (x in chars) {
count++;
if(count%3 == 1 && count != 1) {
newstr = chars[x] + ',' + newstr;
} else {
newstr = chars[x] + newstr;
}
}
return newstr + "." + p[1];
}
মূল অংশটি হাজার-বিভাজক সন্নিবেশ করা হচ্ছে, এটি এভাবে করা যেতে পারে:
<script type="text/javascript">
function ins1000Sep(val){
val = val.split(".");
val[0] = val[0].split("").reverse().join("");
val[0] = val[0].replace(/(\d{3})/g,"$1,");
val[0] = val[0].split("").reverse().join("");
val[0] = val[0].indexOf(",")==0?val[0].substring(1):val[0];
return val.join(".");
}
function rem1000Sep(val){
return val.replace(/,/g,"");
}
function formatNum(val){
val = Math.round(val*100)/100;
val = (""+val).indexOf(".")>-1 ? val + "00" : val + ".00";
var dec = val.indexOf(".");
return dec == val.length-3 || dec == 0 ? val : val.substring(0,dec+3);
}
</script>
<button onclick="alert(ins1000Sep(formatNum(12313231)));">
function
ফিক্সড ইন একটি বিল্ট-ইন রয়েছেjavascript
var num = new Number(349);
document.write("$" + num.toFixed(2));
toFixed()
toFixed()
Number
অবজেক্টের একটি ফাংশন এবং এটি var num
যদি একটি হয় তবে কাজ করবে না String
, তাই অতিরিক্ত প্রসঙ্গটি আমাকে সহায়তা করেছিল।
function CurrencyFormatted(amount)
{
var i = parseFloat(amount);
if(isNaN(i)) { i = 0.00; }
var minus = '';
if(i < 0) { minus = '-'; }
i = Math.abs(i);
i = parseInt((i + .005) * 100);
i = i / 100;
s = new String(i);
if(s.indexOf('.') < 0) { s += '.00'; }
if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
s = minus + s;
return s;
}
উইলমাস্টার থেকে ।
আমি গুগল ভিজ্যুয়ালাইজেশন এপিআই থেকে নম্বর ফর্ম্যাট ক্লাসের পরামর্শ দিই ।
আপনি এর মতো কিছু করতে পারেন:
var formatter = new google.visualization.NumberFormat({
prefix: '$',
pattern: '#,###,###.##'
});
formatter.formatValue(1000000); // $ 1,000,000
আমি আসা করি এটা সাহায্য করবে.
এটি হয়ত একটু দেরীতে হতে পারে তবে এখানে একটি পদ্ধতিটি আমি সহকর্মীর .toCurrencyString()
পক্ষে সমস্ত সংখ্যায় লোকাল-সচেতন ফাংশন যুক্ত করার জন্য কাজ করেছি। অভ্যন্তরীণকরণ কেবলমাত্র সংখ্যার গোষ্ঠীকরণের জন্য, মুদ্রা সাইন নয় - আপনি যদি ডলার আউটপুট করে থাকেন তবে "$"
সরবরাহ হিসাবে ব্যবহার করুন , কারণ $123 4567
জাপান বা চীনতে মার্কিন যুক্তরাষ্ট্রে রয়েছে একই সংখ্যক মার্কিন ডলার $1,234,567
। আপনি যদি ইউরো / ইত্যাদি আউটপুট দিচ্ছেন তবে মুদ্রা সাইন থেকে এটিকে পরিবর্তন করুন "$"
।
এটি আপনার হেডের যে কোনও জায়গায় বা যেখানে প্রয়োজন সেখানে ডিক্লেয়ার করুন আপনার প্রয়োজন এটির আগে:
Number.prototype.toCurrencyString = function(prefix, suffix) {
if (typeof prefix === 'undefined') { prefix = '$'; }
if (typeof suffix === 'undefined') { suffix = ''; }
var _localeBug = new RegExp((1).toLocaleString().replace(/^1/, '').replace(/\./, '\\.') + "$");
return prefix + (~~this).toLocaleString().replace(_localeBug, '') + (this % 1).toFixed(2).toLocaleString().replace(/^[+-]?0+/,'') + suffix;
}
তাহলে তুমি শেষ! আপনার (number).toCurrencyString()
মুদ্রা হিসাবে নম্বর আউটপুট প্রয়োজন যে কোনও জায়গা ব্যবহার করুন ।
var MyNumber = 123456789.125;
alert(MyNumber.toCurrencyString()); // alerts "$123,456,789.13"
MyNumber = -123.567;
alert(MyNumber.toCurrencyString()); // alerts "$-123.57"
সাধারণত, একই জিনিসটি করার একাধিক উপায় রয়েছে তবে আমি ব্যবহারটি এড়াতে চাই Number.prototype.toLocaleString
কারণ এটি ব্যবহারকারীর সেটিংসের ভিত্তিতে বিভিন্ন মান ফিরিয়ে দিতে পারে ।
আমি এটিকে বাড়ানোর প্রস্তাব দিচ্ছি না Number.prototype
- দেশীয় অবজেক্টগুলি প্রোটোটাইপগুলি প্রসারিত করা একটি খারাপ অভ্যাস, কারণ এটি অন্যান্য লোকের কোডের সাথে দ্বন্দ্বের কারণ হতে পারে (যেমন গ্রন্থাগার / ফ্রেমওয়ার্ক / প্লাগইনস) এবং ভবিষ্যতে জাভাস্ক্রিপ্ট প্রয়োগকরণ / সংস্করণগুলির সাথে সামঞ্জস্য হতে পারে না।
আমি বিশ্বাস করি যে নিয়মিত প্রকাশগুলিই সমস্যার জন্য সর্বোত্তম পন্থা, আমার বাস্তবায়নটি এখানে:
/**
* Converts number into currency format
* @param {number} number Number that should be converted.
* @param {string} [decimalSeparator] Decimal separator, defaults to '.'.
* @param {string} [thousandsSeparator] Thousands separator, defaults to ','.
* @param {int} [nDecimalDigits] Number of decimal digits, defaults to `2`.
* @return {string} Formatted string (e.g. numberToCurrency(12345.67) returns '12,345.67')
*/
function numberToCurrency(number, decimalSeparator, thousandsSeparator, nDecimalDigits){
//default values
decimalSeparator = decimalSeparator || '.';
thousandsSeparator = thousandsSeparator || ',';
nDecimalDigits = nDecimalDigits == null? 2 : nDecimalDigits;
var fixed = number.toFixed(nDecimalDigits), //limit/add decimal digits
parts = new RegExp('^(-?\\d{1,3})((?:\\d{3})+)(\\.(\\d{'+ nDecimalDigits +'}))?$').exec( fixed ); //separate begin [$1], middle [$2] and decimal digits [$4]
if(parts){ //number >= 1000 || number <= -1000
return parts[1] + parts[2].replace(/\d{3}/g, thousandsSeparator + '$&') + (parts[4] ? decimalSeparator + parts[4] : '');
}else{
return fixed.replace('.', decimalSeparator);
}
}
2010/08/30 এ সম্পাদিত: দশমিক সংখ্যা সংখ্যা সেট করার বিকল্প যুক্ত করা হয়েছে। 2011/08/23 এ সম্পাদিত: দশমিক অঙ্কের সংখ্যা শূন্যে সেট করতে বিকল্প যুক্ত করা হয়েছে।
এখানে কয়েকটি সমাধান রয়েছে, সকলেই পরীক্ষার স্যুট, পরীক্ষার স্যুট এবং বেঞ্চমার্ক অন্তর্ভুক্ত করে, যদি আপনি পরীক্ষার জন্য অনুলিপি এবং পেস্ট করতে চান তবে এই জিস্টটি চেষ্টা করুন ।
Https://stackoverflow.com/a/14428340/1877620 এ বেস , তবে দশমিক বিন্দু না থাকলে ঠিক করুন।
if (typeof Number.prototype.format === 'undefined') {
Number.prototype.format = function (precision) {
if (!isFinite(this)) {
return this.toString();
}
var a = this.toFixed(precision).split('.');
a[0] = a[0].replace(/\d(?=(\d{3})+$)/g, '$&,');
return a.join('.');
}
}
if (typeof Number.prototype.format === 'undefined') {
Number.prototype.format = function (precision) {
if (!isFinite(this)) {
return this.toString();
}
var a = this.toFixed(precision).split('.'),
// skip the '-' sign
head = Number(this < 0);
// skip the digits that's before the first thousands separator
head += (a[0].length - head) % 3 || 3;
a[0] = a[0].slice(0, head) + a[0].slice(head).replace(/\d{3}/g, ',$&');
return a.join('.');
};
}
if (typeof Number.prototype.format === 'undefined') {
Number.prototype.format = function (precision) {
if (!isFinite(this)) {
return this.toString();
}
var a = this.toFixed(precision).split('.');
a[0] = a[0]
.split('').reverse().join('')
.replace(/\d{3}(?=\d)/g, '$&,')
.split('').reverse().join('');
return a.join('.');
};
}
if (typeof Number.prototype.format === 'undefined') {
Number.prototype.format = function (precision) {
if (!isFinite(this)) {
return this.toString();
}
var a = this.toFixed(precision).split('');
a.push('.');
var i = a.indexOf('.') - 3;
while (i > 0 && a[i-1] !== '-') {
a.splice(i, 0, ',');
i -= 3;
}
a.pop();
return a.join('');
};
}
console.log('======== Demo ========')
console.log(
(1234567).format(0),
(1234.56).format(2),
(-1234.56).format(0)
);
var n = 0;
for (var i=1; i<20; i++) {
n = (n * 10) + (i % 10)/100;
console.log(n.format(2), (-n).format(2));
}
আমরা যদি কাস্টম হাজার হাজার বিভাজক বা দশমিক বিভাজক চাই, ব্যবহার করুন replace()
:
123456.78.format(2).replace(',', ' ').replace('.', ' ');
function assertEqual(a, b) {
if (a !== b) {
throw a + ' !== ' + b;
}
}
function test(format_function) {
console.log(format_function);
assertEqual('NaN', format_function.call(NaN, 0))
assertEqual('Infinity', format_function.call(Infinity, 0))
assertEqual('-Infinity', format_function.call(-Infinity, 0))
assertEqual('0', format_function.call(0, 0))
assertEqual('0.00', format_function.call(0, 2))
assertEqual('1', format_function.call(1, 0))
assertEqual('-1', format_function.call(-1, 0))
// decimal padding
assertEqual('1.00', format_function.call(1, 2))
assertEqual('-1.00', format_function.call(-1, 2))
// decimal rounding
assertEqual('0.12', format_function.call(0.123456, 2))
assertEqual('0.1235', format_function.call(0.123456, 4))
assertEqual('-0.12', format_function.call(-0.123456, 2))
assertEqual('-0.1235', format_function.call(-0.123456, 4))
// thousands separator
assertEqual('1,234', format_function.call(1234.123456, 0))
assertEqual('12,345', format_function.call(12345.123456, 0))
assertEqual('123,456', format_function.call(123456.123456, 0))
assertEqual('1,234,567', format_function.call(1234567.123456, 0))
assertEqual('12,345,678', format_function.call(12345678.123456, 0))
assertEqual('123,456,789', format_function.call(123456789.123456, 0))
assertEqual('-1,234', format_function.call(-1234.123456, 0))
assertEqual('-12,345', format_function.call(-12345.123456, 0))
assertEqual('-123,456', format_function.call(-123456.123456, 0))
assertEqual('-1,234,567', format_function.call(-1234567.123456, 0))
assertEqual('-12,345,678', format_function.call(-12345678.123456, 0))
assertEqual('-123,456,789', format_function.call(-123456789.123456, 0))
// thousands separator and decimal
assertEqual('1,234.12', format_function.call(1234.123456, 2))
assertEqual('12,345.12', format_function.call(12345.123456, 2))
assertEqual('123,456.12', format_function.call(123456.123456, 2))
assertEqual('1,234,567.12', format_function.call(1234567.123456, 2))
assertEqual('12,345,678.12', format_function.call(12345678.123456, 2))
assertEqual('123,456,789.12', format_function.call(123456789.123456, 2))
assertEqual('-1,234.12', format_function.call(-1234.123456, 2))
assertEqual('-12,345.12', format_function.call(-12345.123456, 2))
assertEqual('-123,456.12', format_function.call(-123456.123456, 2))
assertEqual('-1,234,567.12', format_function.call(-1234567.123456, 2))
assertEqual('-12,345,678.12', format_function.call(-12345678.123456, 2))
assertEqual('-123,456,789.12', format_function.call(-123456789.123456, 2))
}
console.log('======== Testing ========');
test(Number.prototype.format);
test(Number.prototype.format1);
test(Number.prototype.format2);
test(Number.prototype.format3);
function benchmark(f) {
var start = new Date().getTime();
f();
return new Date().getTime() - start;
}
function benchmark_format(f) {
console.log(f);
time = benchmark(function () {
for (var i = 0; i < 100000; i++) {
f.call(123456789, 0);
f.call(123456789, 2);
}
});
console.log(time.format(0) + 'ms');
}
// if not using async, browser will stop responding while running.
// this will create a new thread to benchmark
async = [];
function next() {
setTimeout(function () {
f = async.shift();
f && f();
next();
}, 10);
}
console.log('======== Benchmark ========');
async.push(function () { benchmark_format(Number.prototype.format); });
next();
Number(value)
.toFixed(2)
.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
প্রথম এবং বেসিক regexp স্ট্রিংটি বিপরীত করে সঠিক কমা প্লেসমেন্টের জন্য একটি সহজ বিকল্প।
String.prototype.reverse = function() {
return this.split('').reverse().join('');
};
Number.prototype.toCurrency = function( round_decimal /*boolean*/ ) {
// format decimal or round to nearest integer
var n = this.toFixed( round_decimal ? 0 : 2 );
// convert to a string, add commas every 3 digits from left to right
// by reversing string
return (n + '').reverse().replace( /(\d{3})(?=\d)/g, '$1,' ).reverse();
};
আমি এটি থেকে পেয়েছি: অ্যাকাউন্টিং.জেএস । এটি খুব সহজ এবং পুরোপুরি আমার প্রয়োজন ফিট করে।
// Default usage:
accounting.formatMoney(12345678); // $12,345,678.00
// European formatting (custom symbol and separators), can also use options object as second parameter:
accounting.formatMoney(4999.99, "€", 2, ".", ","); // €4.999,99
// Negative values can be formatted nicely:
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
// Euro currency symbol to the right
accounting.formatMoney(5318008, {symbol: "€", precision: 2, thousand: ".", decimal : ",", format: "%v%s"}); // 1.008,00€
formatNumber
জাভাস্ক্রিপ্টে কোনও অন্তর্নির্মিত ফাংশন নেই