हमेशा 2 दशमलव स्थानों को दिखाने के लिए प्रारूप संख्या


781

मैं हमेशा जहां भी लागू हो, 2 दशमलव स्थानों को प्रदर्शित करने के लिए अपनी संख्याओं को प्रारूपित करना चाहूंगा।

उदाहरण:

number     display
------     -------
1          1.00
1.341      1.34
1.345      1.35

मैं इस का उपयोग कर रहा हूँ:

parseFloat(num).toFixed(2);

लेकिन यह प्रदर्शित कर रहा है 1के रूप में 1करने के बजाय, 1.00


2
मेरा मतलब है कि अगर मैं 1 दर्ज करता हूं तो यह नंबर 1.00 के रूप में नहीं दिखाएगा, लेकिन अगर मैं 1.345 दर्ज करता हूं तो यह 1.35
वरदा

1
मैंने आपके प्रश्न को पुनः प्राप्त कर लिया है जो मुझे विश्वास है कि आप खोज रहे थे। कृपया सुनिश्चित करें कि मैंने आपको सही तरीके से समझा है।
परिश्रम से काम करना

सटीक समर्थन के साथ गोलाई। gist.github.com/ArminVieweg/28647e735aa6efaba401
TarranJones


जवाबों:


1114
(Math.round(num * 100) / 100).toFixed(2);

लाइव डेमो

ध्यान दें कि यह होगा दौर , 2 दशमलव स्थानों के लिए तो इनपुट 1.346वापस आ जाएगी 1.35


6
@Kooilnc: ओ पी चाहता है 1के रूप में प्रदर्शित करने के लिए 1.00, और 1.341के रूप में प्रदर्शित करने के लिए 1.34
परिश्रम से काम करना

49
(गोल) इसे लगाने के बाद से गोल () का उपयोग करने की आवश्यकता नहीं है।
मिलन बाबूकोव

27
toFixed () इसे राउंड करता है लेकिन यह भूल नहीं है कि यह एक स्ट्रिंग लौटा रहा है ... तो यह विधि वास्तव में केवल प्रदर्शन के लिए उपयोगी है। यदि आप गोल मूल्य पर आगे गणितीय संगणना करना चाहते हैं, तोFixed () का उपयोग न करें।
दो

8
MDN के अनुसार, Math.round हमेशा गोलाई त्रुटियों के कारण सटीक परिणाम नहीं देगा। मैंने इसे 1.005 के साथ परीक्षण किया, जो 1.01 के लिए गोल होना चाहिए, लेकिन यह 1.00 देता है। : लगातार सटीकता के लिए मेरा उत्तर का प्रयोग करें stackoverflow.com/a/34796988/3549440
नैट

13
इस पूरे उत्तर को कम किया जा सकता है (+num).toFixed(2)। यह मूल में गोलाई के बग को भी बरकरार रखता है, नैट का उत्तर देखें
RobG

321
Number(1).toFixed(2);         // 1.00
Number(1.341).toFixed(2);     // 1.34
Number(1.345).toFixed(2);     // 1.34 NOTE: See andy's comment below.
Number(1.3450001).toFixed(2); // 1.35


1
अंतिम पंक्ति झूठी है। मैंने क्रोम कंसोल और `` नंबर (1.365) में .toFixed (2) रिटर्न "1.37"
आंद्रे

1
@ और, क्रोम 29.0.1547.57 मुझे 1.34अभिव्यक्ति के लिए देता है Number(1.345).toFixed(2)
ड्रू नोक

1
.Fixed राउंडिंग करता है, जिसे आप लगभग हर टेस्ट नंबर पर देख सकते हैं।
andy

40
गलती से कि अंतिम टिप्पणी खत्म होने से पहले प्रस्तुत की गई .. 1.345एक संख्या का एक उदाहरण है जो फ्लोटिंग पॉइंट में बिल्कुल संग्रहीत नहीं किया जा सकता है, इसलिए मुझे लगता है कि यह कारण है कि यह आपकी अपेक्षा के अनुसार गोल नहीं है, क्या यह वास्तव में थोड़ा संख्या के रूप में संग्रहीत है 1.345 से कम है और यह गोल है। आप के साथ के बजाय का परीक्षण करते हैं (1.34500001).toFixed(2)तो आप देख इसे सही ढंग से करने के लिए ऊपर दौर1.35
एंडी

94

यदि यह उत्तर विफल हो जाएगा value = 1.005

बेहतर समाधान के रूप में, घातांक अंकन में दर्शाए गए नंबरों का उपयोग करके गोलाई समस्या से बचा जा सकता है:

Number(Math.round(1.005+'e2')+'e-2'); // 1.01

क्लीनर कोड @Kon और मूल लेखक द्वारा सुझाए गए अनुसार:

Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)

आप toFixed()दशमलव बिंदु को बनाए रखने के लिए अंत में जोड़ सकते हैं जैसे: 1.00लेकिन ध्यान दें कि यह स्ट्रिंग के रूप में वापस आ जाएगा।

Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces).toFixed(decimalPlaces)

क्रेडिट: जावास्क्रिप्ट में गोल चक्कर


13
आश्चर्यजनक रूप से, यहां के बाकी सभी लोग toFixedउस दौर को देखने में असफल रहे । आपका उत्तर स्वीकृत होना चाहिए।
आर्मफूट

1
बस यह देखने के लिए परीक्षण किया गया कि क्या यह अभी भी मामला था। आप अभी भी Chrome संस्करण 59.0.3071.115 के लिए सही हैं। आपका समाधान 1.005 (1.01) के लिए और 1.00499999 (1.00) के लिए राउंड डाउन होगा
Artistan

jsfiddle.net/Artistan/qq895bnp/28 "समय" हैं जब toFixed काम करेगा, लेकिन यह काफी असंगत है। :)
आर्टिस्टिक जूल

चारों ओर parseFloat में इसकी वापसी स्ट्रिंग है
user889030

1
यह एक ठोस जवाब है। कुछ सुधार जो मैं सोच सकता हूं: (1) वीएस कोड (टाइपस्क्रिप्ट फ़ाइल) एक स्ट्रिंग में पास होना Math.round () को पसंद नहीं करता है। (2) दशमलव स्थानों की संख्या को गतिशील बनाएं (हार्ड-कोडेड टू नहीं)। (३) प्रत्यय () अनावश्यक लगता है। तो मैं जो कुछ लेकर आया हूं वह हैNumber(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
कोन

23
var num = new Number(14.12);
console.log(num.toPrecision(2));//outputs 14
console.log(num.toPrecision(3));//outputs 14.1
console.log(num.toPrecision(4));//outputs 14.12
console.log(num.toPrecision(5));//outputs 14.120

यह अप्रत्याशित परिणाम देता है, यदि आपकी संख्या 1.4 और 23.654, और 0 हो सकती है, तो आप क्या सटीकता लेंगे?
शिंजौ

2
नोट ओपी "राउंडिंग वेयर अप्लाई" के लिए पूछ रहा है । toPrecisionकेवल दशमलव स्थानों की एक विशिष्ट संख्या के लिए संख्या को प्रारूपित करता है, बस निरर्थक स्थानों को छोड़ देता है, लेकिन उन्हें गोल नहीं करता है । यह निश्चित रूप से बहुत उपयोगी हो सकता है, लेकिन अंतर को समझना महत्वपूर्ण है।
बोअज़ -

1
असल में मोज़रीला के अनुसार, यह पूरी तरह से गोल है। टेस्ट:(20.55).toPrecision(3) "20.6"
जेम्स एल।

2
यदि आप ट्रेलिंग जीरो को स्ट्रिप करना चाहते हैं , तो उपयोग करने के बाद इसे एक नंबर या फ्लोट पर डालें toFixed: const formattedVal = Number(val.toFixed(2));उपयोग न करें toPrecision, क्योंकि यह सटीक परम का उपयोग करते समय गैर-दशमलव संख्याओं को गिना जाता है।
जेम्स एल

17

सबसे सटीक गोलाई के लिए, यह फ़ंक्शन बनाएं:

function round(value, decimals) {
    return Number(Math.round(value +'e'+ decimals) +'e-'+ decimals).toFixed(decimals);
}

और इसे 2 दशमलव स्थानों के लिए उपयोग करें:

console.log("seeked to " + round(1.005, 2));
> 1.01

रज्जू , इस लेख और एमडीएन के मैथ.वार्ड संदर्भ के लिए धन्यवाद ।


1
1.0049999999999998934 के बारे में क्या?
4esn0k

1
यह 2 डीपी से आगे नहीं जाता है
स्टीफन एडेलकुन

1
jsfiddle.net/Artistan/qq895bnp ने परीक्षण किया, यह एकमात्र सुसंगत विधि है जिसे मैंने देखा है। धन्यवाद।
आर्टिस्टिक जूल

16

आधुनिक ब्राउज़रों के लिए, उपयोग करें toLocaleString:

var num = 1.345;
num.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });

दशमलव विभाजक को नियंत्रित करने के लिए पहले पैरामीटर के रूप में एक स्थानीय टैग निर्दिष्ट करें । एक बिंदु के लिए, उदाहरण के लिए अंग्रेज़ी US लोकेल का उपयोग करें:

num.toLocaleString("en-US", { maximumFractionDigits: 2, minimumFractionDigits: 2 });

जो देता है:

1.35

यूरोप के अधिकांश देश दशमलव विभाजक के रूप में अल्पविराम का उपयोग करते हैं, इसलिए यदि आप उदाहरण के लिए स्वीडिश / स्वीडन लोकेल का उपयोग करते हैं:

num.toLocaleString("sv-SE", { maximumFractionDigits: 2, minimumFractionDigits: 2 });

यह देगा:

1,35


यह सुनिश्चित नहीं है कि यह नीचे की ओर क्यों है, यह मेरे लिए अच्छा काम करता है। कृपया टिप्पणी जोड़ें यदि आप इसे कम करने का इरादा रखते हैं अगर इसमें कुछ गड़बड़ है!
जॉन कुलविनर

13

सबसे सरल उत्तर:

var num = 1.2353453;
num.toFixed(2); // 1.24

उदाहरण: http://jsfiddle.net/E2XU7/


11
वैसे, toFixedपहले से ही stackoverflow.com/a/13292833/218196 में सुझाव दिया गया था । आपका प्रश्न क्या अतिरिक्त जानकारी प्रदान करता है?
फेलिक्स क्लिंग

उस उत्तर में गोल कार्यक्षमता शामिल नहीं है, मेरे उत्तर में थियो शामिल है।
macio.Jun

8
उह? यह बिल्कुल एक ही जवाब है। toFixedएक नंबर पर कॉल किया जा रहा है।
फेलिक्स क्लिंग

1
सही, समान कार्य, लेकिन उस उत्तर का परिणाम भ्रामक है, मैंने इसे केवल गोल कार्यक्षमता व्यक्त करके ठीक किया।
macio.Jun

प्रश्न में कहा गया है: "... जहां लागू हो, गोलाई"। आपके उत्तर में गोलाई शामिल नहीं है।
क्रिस

12

एन स्थानों पर गोलाई के लिए एक और अधिक सामान्य समाधान

function roundN(num,n){
  return parseFloat(Math.round(num * Math.pow(10, n)) /Math.pow(10,n)).toFixed(n);
}


console.log(roundN(1,2))
console.log(roundN(1.34,2))
console.log(roundN(1.35,2))
console.log(roundN(1.344,2))
console.log(roundN(1.345,2))
console.log(roundN(1.344,3))
console.log(roundN(1.345,3))
console.log(roundN(1.3444,3))
console.log(roundN(1.3455,3))

Output

1.00
1.34
1.35
1.34
1.35
1.344
1.345
1.344
1.346

1
यह एल्सर 0 के करीब कुछ संख्याओं के साथ विफल रहता है, अपेक्षित 0.00 के बजाय roundN(-3.4028230607370965e+38,2)रिटर्न "-3.4028230607370965e+38"करता है
फेरीबग

दिलचस्प @Ferrybig मैं आपके द्वारा बताए गए नंबरों का परीक्षण करूंगा और एक वर्कअराउंड के बारे में
सोचूंगा

1
ध्यान दें कि पहले उल्लेखित संख्या शून्य नहीं दिखनी चाहिए, लेकिन इसके बजाय एक बड़ी संख्या, यह मेरे मस्तिष्क में एक त्रुटि थी। लेकिन यह अभी भी काम नहीं करता है, क्योंकि यह अभी भी 2 दशमलव नहीं दिखाता है
फेरीबग


9

यदि आप पहले से ही jQuery का उपयोग कर रहे हैं, तो आप jQuery नंबर प्रारूप प्लगइन का उपयोग करके देख सकते हैं ।

प्लगइन एक स्ट्रिंग के रूप में स्वरूपित संख्याओं को वापस कर सकता है, आप दशमलव और हजारों विभाजक सेट कर सकते हैं, और आप दिखाने के लिए दशमलव की संख्या चुन सकते हैं।

$.number( 123, 2 ); // Returns '123.00'

आप GitHub से jQuery नंबर प्रारूप भी प्राप्त कर सकते हैं ।


11
यह एक प्लगइन का उपयोग करने के लिए overkill है "बस तय लंबाई दशमलव भाग के लिए"।
लशै

9
@Lashae, निश्चित रूप से, यदि सभी आप करना चाहते हैं। मैं इस मामले में पोस्ट किया था कि ओपी या कोई और अतिरिक्त कार्यक्षमता चाहता था जो प्लगइन प्रदान करता है।
सैम सेहर्ट्ट

यदि प्रश्न के पोस्टर में पाठ्यक्रम का jQuery टैग जोड़ा गया है;)
fullstacklife

7

क्या तुम्हारे कहने का मतलब यही था?

function showAsFloat(num, n){
      return !isNaN(+num) ? (+num).toFixed(n || 2) : num;
}

document.querySelector('#result').textContent = 
    [
     'command                      | result',
     '-----------------------------------------------',
     'showAsFloat(1);              | ' + showAsFloat(1),
     'showAsFloat(1.314);          | ' + showAsFloat(1.314),
     'showAsFloat(\'notanumber\')    | ' + showAsFloat('notanumber'),
     'showAsFloat(\'23.44567\', 3)   | ' + showAsFloat('23.44567', 3),
     'showAsFloat(2456198, 5)      | ' + showAsFloat('2456198', 5),
     'showAsFloat(0);              | ' + showAsFloat(0)
    ].join('\n');
<pre id="result"></pre>


6

संख्या को केवल दो दशमलव रखते हुए एक स्ट्रिंग में परिवर्तित करें:

var num = 5.56789;
var n = num.toFixed(2);

N का परिणाम होगा:

5.57

4

क्या आप मंजिल की तलाश कर रहे हैं?

var num = 1.42482;
var num2 = 1;
var fnum = Math.floor(num).toFixed(2);
var fnum2 = Math.floor(num2).toFixed(2);
alert(fnum + " and " + fnum2); //both values will be 1.00

4
मुझे नहीं लगता कि वह निकटतम पूर्णांक तक चक्कर लगाना चाहता है।
परिश्रम से काम करना

हाँ, मैं वर्णन से निश्चित नहीं था, लेकिन मैं इसे वहां से बाहर निकाल रहा था
sam

3
function currencyFormat (num) {
    return "$" + num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
}

console.info(currencyFormat(2665));   // $2,665.00
console.info(currencyFormat(102665)); // $102,665.00

3

यहां एक सामान्य कार्य भी है जो किसी भी दशमलव स्थान पर प्रारूपित कर सकता है:

function numberFormat(val, decimalPlaces) {

    var multiplier = Math.pow(10, decimalPlaces);
    return (Math.round(val * multiplier) / multiplier).toFixed(decimalPlaces);
}

3

जहां विशिष्ट स्वरूपण की आवश्यकता होती है, आपको अपनी खुद की दिनचर्या लिखना चाहिए या एक लाइब्रेरी फ़ंक्शन का उपयोग करना चाहिए जो आपको आवश्यक है। मूल ECMAScript कार्यक्षमता आमतौर पर स्वरूपित संख्याओं को प्रदर्शित करने के लिए अपर्याप्त है।

गोलाई और स्वरूपण की गहन व्याख्या यहाँ है: http://www.merlyn.demon.co.uk/js-round.htm#RiJ

एक सामान्य नियम के रूप में, गोलाई और स्वरूपण केवल आउटपुट से पहले अंतिम चरण के रूप में होना चाहिए। पहले ऐसा करना अप्रत्याशित रूप से बड़ी त्रुटियों का परिचय दे सकता है और स्वरूपण को नष्ट कर सकता है।


ऐसे समय होते हैं जब मैं इस पूरे जेएस / एक्मा प्लेटफॉर्म में देर से शामिल होने के लिए अपनी मर्जी से अपना सिर हिलाता हूं। :( "जहां विशिष्ट स्वरूपण की आवश्यकता है, आपको अपनी खुद की दिनचर्या लिखनी चाहिए या एक लाइब्रेरी फ़ंक्शन का उपयोग करना चाहिए जो आपको आवश्यक है। मूल ECMAScript कार्यक्षमता आमतौर पर स्वरूपित संख्याओं को प्रदर्शित करने के लिए अपर्याप्त है।" एक असिन का कथन - आपने इसे नहीं बनाया है। लेकिन क्योंकि यह तथ्य मौजूद है। सिर्फ दुखी। गेंद पर जाओ, जावास्क्रिप्ट! :)
क्रिस डेस

2

function number_format(string,decimals=2,decimal=',',thousands='.',pre='R$ ',pos=' Reais'){
  var numbers = string.toString().match(/\d+/g).join([]);
  numbers = numbers.padStart(decimals+1, "0");
  var splitNumbers = numbers.split("").reverse();
  var mask = '';
  splitNumbers.forEach(function(d,i){
    if (i == decimals) { mask = decimal + mask; }
    if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; }
    mask = d + mask;
  });
  return pre + mask + pos;
}
var element = document.getElementById("format");
var money= number_format("10987654321",2,',','.');
element.innerHTML = money;
#format{
display:inline-block;
padding:10px;
border:1px solid #ddd;
background:#f5f5f5;
}
<div id='format'>Test 123456789</div>


2

बस इस सबसे लंबे धागे में से एक में चलाएं, नीचे मेरा समाधान है:

parseFloat(Math.round((parseFloat(num * 100)).toFixed(2)) / 100 ).toFixed(2)

मुझे पता है अगर कोई एक छेद प्रहार कर सकते हैं


2


2
कोड का यह टुकड़ा आपकी आवश्यकता को प्राप्त करने के लिए पर्याप्त है parseFloat(num.toFixed(2))
kva

1

आप हमें पूरी तस्वीर नहीं दे रहे हैं।

javascript:alert(parseFloat(1).toFixed(2))अपने ब्राउज़र में 1.00 दिखाता है जब मैं इसे स्थान पट्टी पर int0 चिपकाता हूं। हालाँकि यदि आप इसके बाद कुछ करते हैं, तो यह वापस आ जाएगा।

var num = 2
document.getElementById('spanId').innerHTML=(parseFloat(num).toFixed(2)-1)


shows 1 and not 1.00

FF 50, क्रोम 49 और IE 8
फ्लोरियन स्ट्रब


1

इससे पहले कि मैं toFixed () कॉल कर पाता, मुझे parseFloat () और नंबर () रूपांतरणों के बीच फैसला करना था। उपयोगकर्ता इनपुट पर पोस्ट-कैप्चरिंग नंबर स्वरूपण का एक उदाहरण यहां दिया गया है।

HTML:

<input type="number" class="dec-number" min="0" step="0.01" />

आयोजन प्रबंधकर्ता:

$('.dec-number').on('change', function () {
     const value = $(this).val();
     $(this).val(value.toFixed(2));
});

उपरोक्त कोड TypeError अपवाद में होगा। ध्यान दें कि यद्यपि html इनपुट प्रकार "संख्या" है, उपयोगकर्ता इनपुट वास्तव में एक "स्ट्रिंग" डेटा प्रकार है। हालाँकि, toFixed () फ़ंक्शन को केवल एक ऑब्जेक्ट पर एक संख्या के रूप में लागू किया जा सकता है।

मेरा अंतिम कोड निम्नानुसार होगा:

$('.dec-number').on('change', function () {
     const value = Number($(this).val());
     $(this).val(value.toFixed(2));
});

कारण है कि मैं नंबर () बनाम पार्सफ्लोअट () के साथ वोट करने का पक्ष लेता हूं, क्योंकि मुझे न तो खाली इनपुट स्ट्रिंग के लिए अतिरिक्त सत्यापन करना है, न ही NaN मूल्य। नंबर () फ़ंक्शन स्वचालित रूप से एक खाली स्ट्रिंग को संभालता है और इसे शून्य पर गुप्त करता है।


0

मुझे अच्छा लगता है:

var num = 12.749;
parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75

2 दशमलव बिंदुओं के साथ संख्या को गोल करें, फिर parseFloat() नंबर वापस करने के लिए इसे पार्स करना सुनिश्चित करें , न कि स्ट्रिंग जब तक आप परवाह नहीं करते अगर यह स्ट्रिंग या नंबर है।


मुझे लगता है कि अगर उद्देश्य 2 दशमलव सटीकता के साथ प्रदर्शित करना था, तो फ्लोट को पार्स करने से गड़बड़ हो जाएगी। जैसेparseFloat("1.00") // 1
Stijn de Witt

0

सटीक विधि के साथ गणित वस्तु का विस्तार

Object.defineProperty(Math, 'precision',{
   value: function (value,precision,type){
             var v = parseFloat(value),
                 p = Math.max(precision,0)||0,
                 t = type||'round';
              return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p);
          }
    });

console.log(
    Math.precision(3.1,3), // round 3 digits 
    Math.precision(0.12345,2,'ceil'), // ceil 2 digits
    Math.precision(1.1) // integer part
)



0

यहां केवल फर्श का उपयोग करके गोल करने का एक और समाधान है, जिसका अर्थ है, यह सुनिश्चित करना कि गणना की गई राशि मूल राशि (कभी-कभी लेनदेन के लिए आवश्यक) से बड़ी नहीं होगी:

Math.floor(num* 100 )/100;

0

आप इस कोड को आज़मा सकते हैं:

    function FormatNumber(number, numberOfDigits = 2) {
        try {
            return new Intl.NumberFormat('en-US').format(parseFloat(number).toFixed(2));
        } catch (error) {
            return 0;
        }
    }

    var test1 = FormatNumber('1000000.4444');
    alert(test1); // 1,000,000.44

    var test2 = FormatNumber(100000000000.55555555, 4);
    alert(test2); // 100,000,000,000.56

0

कोड के नीचे आज़माएं:

function numberWithCommas(number) { 

   var newval = parseFloat(Math.round(number * 100) / 100).toFixed(2);

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.