"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > यदि सटीक उत्तर की आवश्यकता हो तो आइटम फ़्लोट और डबल से बचें

यदि सटीक उत्तर की आवश्यकता हो तो आइटम फ़्लोट और डबल से बचें

2024-11-06 को प्रकाशित
ब्राउज़ करें:691

Item  Evite o float e o double caso sejam necessárias respostas exatas

फ्लोट और डबल के साथ समस्या:

  • वैज्ञानिक और गणितीय गणनाओं के लिए डिज़ाइन किया गया, बाइनरी फ़्लोटिंग-पॉइंट अंकगणित निष्पादित करें।
  • मौद्रिक गणना या उन स्थितियों के लिए उपयुक्त नहीं है जिनके लिए सटीक उत्तर की आवश्यकता होती है।
  • दस की नकारात्मक शक्तियों का सटीक प्रतिनिधित्व नहीं कर सकता, जैसे 0.1, जिससे त्रुटियां होती हैं।

उदाहरण 1:
डॉलर की रकम घटाते समय गलत गणना:

System.out.println(1.03 - 0.42);  // Resultado: 0.6100000000000001

उदाहरण 2:
प्रत्येक 10 सेंट के लिए नौ आइटम खरीदते समय त्रुटि:

System.out.println(1.00 - 9 * 0.10);  // Resultado: 0.09999999999999998

गोल करने पर भी त्रुटियां बनी रहती हैं।
प्रगतिशील गणनाओं में समस्या, जैसे कि 0.10 से 1.00 की वृद्धिशील कीमतों पर मिठाइयाँ खरीदते समय।

उदाहरण 3:
जब तक आपके पास अधिक पैसे न हों तब तक मिठाइयाँ खरीदते समय त्रुटि:

double funds = 1.00;
for (double price = 0.10; funds >= price; price  = 0.10) {
    funds -= price;
}
System.out.println(funds);  // Resultado: 0.3999999999999999

समाधान 1: बिगडेसीमल का उपयोग करें

  • वित्तीय गणनाओं और स्थितियों के लिए आदर्श जहां सटीकता आवश्यक है।
  • स्ट्रिंग कंस्ट्रक्टर को प्राथमिकता देते हुए BigDecimal के डबल कंस्ट्रक्टर का उपयोग करने से बचें।

बिगडेसीमल के साथ उदाहरण:

BigDecimal funds = new BigDecimal("1.00");
BigDecimal price = new BigDecimal("0.10");
int itemsBought = 0;

while (funds.compareTo(price) >= 0) {
    funds = funds.subtract(price);
    price = price.add(new BigDecimal("0.10"));
    itemsBought  ;
}
System.out.println(itemsBought   " items bought. Money left: "   funds);  
// Resultado: 4 items bought. Money left: 0.00

गणना अब सटीक है।

बिगडेसीमल के नुकसान:

  • आदिम प्रकारों की तुलना में उपयोग में कम सुविधाजनक।
  • धीमी, विशेष रूप से बड़ी मात्रा में परिचालन के लिए।

समाधान 2: int या long का उपयोग करें

  • सटीकता संबंधी समस्याओं से बचने के लिए, डबल के साथ डॉलर के बजाय इंट या लॉन्ग का उपयोग करके सेंट में गणना करें।

इंट (सेंट में) के साथ उदाहरण:

int funds = 100;  // 1.00 dólar = 100 centavos
int price = 10;   // 0.10 dólar = 10 centavos
int itemsBought = 0;

while (funds >= price) {
    funds -= price;
    price  = 10;
    itemsBought  ;
}
System.out.println(itemsBought   " items bought. Money left: "   funds);  
// Resultado: 4 items bought. Money left: 0

गणना तेज़ और सटीक है।

निष्कर्ष:

  • सटीक परिशुद्धता की आवश्यकता वाली गणनाओं के लिए फ्लोट या डबल का उपयोग न करें।
  • मौद्रिक गणना या उन स्थितियों के लिए बिगडेसीमल का उपयोग करें जिनमें दशमलव परिशुद्धता की आवश्यकता होती है।
  • वित्तीय गणनाओं के लिए int या long का उपयोग करें जिसमें बड़ी संख्याएं शामिल न हों, गणना सेंट में करें।

विकल्प:

  • 9 अंकों तक के लिए, int का उपयोग करें।
  • 18 अंकों तक के लिए, long का उपयोग करें।
  • बड़ी मात्रा के लिए, BigDecimal का उपयोग करें।
  • यह सारांश दिखाता है कि, संदर्भ के आधार पर, बिगडेसीमल, इंट या लॉन्ग के बीच चयन करने से सटीकता और प्रदर्शन दोनों को अनुकूलित किया जा सकता है।
विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/giselecoder/item-60-evite-o-float-e-o-double-caso-sejam-necessarias-respostas-exatas-3mep?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163 .comडिलीट से संपर्क करें
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3