फ्लोट और डबल के साथ समस्या:
उदाहरण 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 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
गणना तेज़ और सटीक है।
निष्कर्ष:
विकल्प:
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3