फ़िक्स्ड () और पिपरमेंट () के बीच अंतर?


124

मैं जावास्क्रिप्ट के लिए नया हूं और बस खोजा गया toFixed()और toPrecision()संख्याओं को गोल करना है। हालाँकि, मैं यह पता नहीं लगा सकता कि दोनों में क्या अंतर है।

बीच क्या अंतर है number.toFixed()और number.toPrecision()?

जवाबों:


133

toFixed(n)nदशमलव बिंदु के बाद लंबाई प्रदान करता है ; कुल लंबाई toPrecision(x)प्रदान करता है x

W3schools पर रेफरी करें: फ़िक्स्ड और टोप्रिसे

संपादित करें :
मैंने कुछ समय पहले सीखा कि w3schools वास्तव में सबसे अच्छा स्रोत नहीं है, लेकिन मैं इस उत्तर के बारे में भूल गया जब तक कि मैंने kzh's, uh, "उत्साही" टिप्पणी नहीं देखी। यहाँ मोज़िला डॉक्टर केन्द्र से अतिरिक्त refs हैं के लिएtoFixed() और के लिएtoPrecision() । सौभाग्य से हम सभी के लिए, MDC और w3schools इस मामले में एक दूसरे से सहमत हैं।

पूर्णता के लिए, मुझे इस बात का उल्लेख करना चाहिए कि toFixed()यह समतुल्य है toFixed(0)और toPrecision()केवल मूल स्वरूप को बिना किसी स्वरूपण के लौटाता है।


11
बाह, मैंने इसे जुलाई 2010 में पोस्ट किया था, और मैंने इस साल तक w3fools के बारे में नहीं सीखा। जबकि मूर्ख कुछ चीजों के बारे में सही हैं, न कि स्कूलों में सब कुछ गलत है। यह इंगित करने के लिए धन्यवाद कि मुझे इस पोस्ट को अपडेट करने की आवश्यकता है, हालांकि; थोड़े में कर लेंगे।
पोप्स

24
toPrecision(x)" xकुल लंबाई प्रदान नहीं करता है ", यह दिए गए महत्वपूर्ण अंकों की संख्या को प्रारूपित करता है। उदाहरण के लिए, 0.0000022.toPrecision(1)लौटेगा 0.000002
एंडी ई

5
मैं सिर्फ w3fools का दौरा किया और जो भी आश्वस्त नहीं था। मैं कोई तर्क भी नहीं देखता। मेरे द्वारा देखा गया दो अन्य साइटों के लिए एक विज्ञापन है।
NiCk न्यूमैन

2
बयान "... कुल लंबाई toPrecision(x)प्रदान करता है x।" जरूरी नहीं कि पकड़ हो। काउंटर उदाहरण:0.00001234.toPrecision(3)
djvg

59

मेरा मानना ​​है कि पूर्व आपको एक निश्चित संख्या में दशमलव स्थान देता है, जबकि उत्तरार्द्ध आपको निश्चित संख्या में महत्वपूर्ण अंक प्रदान करता है।

Math.PI.toFixed(2); // "3.14"
Math.PI.toPrecision(2); // "3.1"

इसके अलावा, यदि निर्दिष्ट परिशुद्धता की तुलना में संख्या में अधिक पूर्णांक अंक हैं, तो वैज्ञानिक अंकनtoPrecision प्राप्त होगा ।

(Math.PI * 10).toPrecision(2); // "31"
(Math.PI * 100).toPrecision(2); // "3.1e+2"

संपादित करें: ओह, और यदि आप जावास्क्रिप्ट के लिए नए हैं, तो मैं डगलस ब्रॉकफोर्ड की पुस्तक " जावास्क्रिप्ट: द गुड पार्ट्स " की अत्यधिक अनुशंसा कर सकता हूं ।


14

उदाहरण स्पष्ट रूप से बोलते हैं:

var A = 123.456789;

A.toFixed()      // 123
A.toFixed(0)     // 123
A.toFixed(1)     // 123.5
A.toFixed(2)     // 123.46
A.toFixed(3)     // 123.457
A.toFixed(4)     // 123.4568
A.toFixed(5)     // 123.45679
A.toFixed(6)     // 123.456789
A.toFixed(7)     // 123.4567890
A.toFixed(8)     // 123.45678900
A.toFixed(9)     // 123.456789000
A.toFixed(10)    // 123.4567890000
A.toFixed(11)    // 123.45678900000

A.toPrecision()      // 123.456789 
A.toPrecision(0)     // --- ERROR --- 
A.toPrecision(1)     // 1e+2
A.toPrecision(2)     // 1.2e+2
A.toPrecision(3)     // 123
A.toPrecision(4)     // 123.5
A.toPrecision(5)     // 123.46
A.toPrecision(6)     // 123.457
A.toPrecision(7)     // 123.4568
A.toPrecision(8)     // 123.45679
A.toPrecision(9)     // 123.456789
A.toPrecision(10)    // 123.4567890
A.toPrecision(11)    // 123.45678900

11

मुझे लगता है कि यह एक उदाहरण के साथ सबसे अच्छा उत्तर दिया गया है।

मान लें कि आपके पास निम्न डेटा है:

var products = [
  {
    "title": "Really Nice Pen",
    "price": 150
  },
  {
    "title": "Golf Shirt",
    "price": 49.99
  },
  {
    "title": "My Car",
    "price": 1234.56
  }
]

आप इनमें से प्रत्येक उत्पाद को शीर्षक और स्वरूपित मूल्य के साथ प्रदर्शित करना चाहते हैं। आइए toPrecisionपहले प्रयोग करके देखें :

document.write("The price of " + products[0].title + " is $" + products[0].price.toPrecision(5));

The price of Really Nice Pen is $150.00

अच्छा लग रहा है, तो आपको लगता है कि यह अन्य उत्पादों के लिए भी काम करेगा:

document.write("The price of " + products[1].title + " is $" + products[2].price.toPrecision(5));
document.write("The price of " + products[2].title + " is $" + products[2].price.toPrecision(5));

The price of Golf Shirt is $49.990
The price of My Car is $1234.6

इतना अच्छा नहीं। हम प्रत्येक उत्पाद के लिए महत्वपूर्ण अंकों की संख्या को बदलकर इसे ठीक कर सकते हैं, लेकिन यदि हम उन उत्पादों के सरणी पर पुनरावृत्ति कर रहे हैं जो मुश्किल हो सकते हैं। toFixedइसके बजाय उपयोग करें :

document.write("The price of " + products[0].title + " is $" + products[0].price.toFixed(2));
document.write("The price of " + products[1].title + " is $" + products[2].price.toFixed(2));
document.write("The price of " + products[2].title + " is $" + products[2].price.toFixed(2));

The price of Really Nice Pen is $150.00
The price of Golf Shirt is $49.99
The price of My Car is $1234.56

यह वही पैदा करता है जिसकी आपको उम्मीद थी। कोई अनुमान कार्य शामिल नहीं है, और कोई गोलाई नहीं है।



5

कुछ परिस्थितियों में, toPrecision()घातीय संकेतन लौटाएगा, जबकि toFixed()नहीं।


दरअसल, toExponential()एक अलग कार्य है
पॉप

4
@ लॉर्ड तोर्गामस: जावास्क्रिप्ट की मेरी प्रति के अनुसार : निश्चित गाइड , toPreults (परिशुद्धता) निश्चित-बिंदु संकेतन का उपयोग करेगा यदि सटीक arg संख्या के पूर्णांक भाग के सभी अंकों को शामिल करने के लिए पर्याप्त है। अन्यथा, घातीय संकेतन का उपयोग किया जाता है।
राबर्ट

कम से कम कुछ मामलों में, यह सही नहीं है: मेरे फ़ायरफ़ॉक्स में a = 999999999999999934464;, a.toFixed(0)रिटर्न के साथ "1e+21"। शायद एक अधिक सटीक उत्तर यह होगा कि जब तक स्ट्रीपिंग () नहीं होती है तब तक () फ़्लॉन्फ़िशियल नोटेशन वापस नहीं करता है।
द पॉल

1

उदाहरण के लिए, हम वैरिएबल को a, var a = 123.45 a.toPreaches (6) मानते हैं। आउटपुट 123.450 a.toFixed (6) है। आउटपुट दशमलव बिंदु के बाद 123.450000 // 6 अंक जैसा है।


0

दोनों toPrecision()और toFixed()कार्य इसे प्रिंट करने से पहले एक संख्या को प्रारूपित करने के लिए डिज़ाइन किए गए हैं। इसलिए वे दोनों Stringमान लौटाते हैं।

एक अपवाद है। यदि आप एक नकारात्मक संख्या शाब्दिक पर इन कार्यों का उपयोग करते हैं , तो ऑपरेटर पूर्ववर्तीता के कारण, एक संख्या वापस आ जाती है। कि क्या इसका मतलब यह है toFixed()या toPrecision()स्ट्रिंग पहली बार वापस आ जाएगी, और फिर -माइनस ऑपरेटर एक नकारात्मक मूल्य के रूप में एक संख्या के लिए स्ट्रिंग वापस परिवर्तित कर देंगे। एक उदाहरण के लिए नीचे देखें।

toPrecision()रिटर्न एक Stringनिश्चित बिंदु या घातीय संकेतन में संख्या वस्तु का प्रतिनिधित्व करने के लिए महत्वपूर्ण अंक गोल। इसलिए यदि आप निर्दिष्ट करते हैं कि आप 1 की परिशुद्धता चाहते हैं, तो यह महत्वपूर्ण अंक के साथ 10 या पिछले 0 की शक्तियों को इंगित करने के लिए वैज्ञानिक अंकन के साथ पहली महत्वपूर्ण संख्या लौटाता है यदि महत्वपूर्ण संख्या <0 है।

const num1 = 123.4567;

// if no arguments are passed, it is similar to converting the Number to String
num1.toPrecision();   // returns "123.4567

// scientific notation is used when you pass precision count less than total
// number of digits left of the period
num1.toPrecision(2);  // returns "1.2e+2"

// last digit is rounded if precision is less than total significant digits
num1.toPrecision(4);  // returns "123.5"
num1.toPrecision(5);  // returns "123.46"

const largeNum = 456.789;
largeNum.toPrecision(2);  // returns "4.6e+2"

// trailing zeroes are added if precision is > total digits of the number or float
num1.toPrecision(9);  // returns "123.456700"

const num2 = 123;
num2.toPrecision(4);  // returns "123.0"

const num3 = 0.00123;
num3.toPrecision(4);  // returns "0.001230"
num3.toPrecision(5);  // returns "0.0012300"

// if the number is < 1, precision is by the significant digits
num3.toPrecision(1);  // returns "0.001"

toFixed()एक रिटर्न Stringनिश्चित बिंदु अंकन में संख्या वस्तु का प्रतिनिधित्व करने वाले को गिरफ्तार। यह फ़ंक्शन केवल दशमलव बिंदु संख्याओं की परवाह करता है

const num1 = 123.4567;

// if no argument is passed, the fractions are removed
num1.toFixed();  // returns "123"

// specifying an argument means you the amount of numbers after the decimal point
num1.toFixed(1);  // returns "123.5"
num1.toFixed(3);  // returns "123.457"
num1.toFixed(5);  // returns "123.45670"
num1.toFixed(7);  // returns "123.4567000"

// trying to operator on number literals
2.34.toFixed(1);  // returns "2.3"
2.toFixed(1);     // returns SyntaxError
(2).toFixed(1);   // returns "2.0"
(2.34e+5).toFixed(1);  // returns "234000.0"

मैंने एक अपवाद के ऊपर उल्लेख किया है जहां नकारात्मक संख्या के इन कार्यों का उपयोग करने से शाब्दिक संख्या वापस आ जाएगी और ऑपरेटर पूर्ववर्तीता के कारण स्ट्रिंग नहीं। यहाँ कुछ उदाहरण हैं:

// Note: these are returning as Number
// toPrecision()
-123.45.toPrecision();  // returns -123.45
-123.45.toPrecision(2);  // returns -120
-123.45.toPrecision(4);  // returns -123.5
-2.34e+2.toPrecision(1);  // returns -200
-0.0456.toPrecision(1);  // returns -0.05
-0.0456.toPrecision(6);  // returns -0.0456

// toFixed()
-123.45.toFixed();  // returns -123.45
-123.45.toFixed(1);  // returns -123.5
-123.45.toFixed(4);  // returns -123.45
-0.0456.toFixed(1);  // returns -0
-0.0456.toFixed(6);  // -0.0456

मजेदार तथ्य: जैसा कि देखा गया है कि हस्ताक्षरित शून्य हैं -0.0456.toFixed(1)

देखें: क्या +0 और -0 समान हैं?

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