BigDecimal के लिए जोड़


155

मैं BigDecimalटाइप में व्यक्त कुछ मुद्रा मूल्यों के साथ कुछ सरल रकम करना चाहता हूं ।

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test.add(new BigDecimal(30));
System.out.println(test);
test.add(new BigDecimal(45));
System.out.println(test);

जाहिर है कि मैं अच्छी तरह से BigDecimalअंकगणित को नहीं समझता , आउटपुट को पीछे देखता हूं।

Test
0
0
0

क्या कोई मेरी मदद कर सकता है?

जवाबों:


275

BigDecimalतो आप ऐसा करने की जरूरत अपरिवर्तनीय है:

BigDecimal result = test.add(new BigDecimal(30));
System.out.println(result);

27
मैं भ्रम को समझ सकता हूं। भले ही यह कहा गया हो कि बिगडेक्विमल अपरिवर्तनीय है, प्रलेखन बेहतर हो सकता है। उदाहरण के लिए, डॉक्स राज्य विधि के लिए add(..): "बड़ा करें - इस बिगडेसिमल में जोड़ा जा सकता है ।" इसके अलावा, "... एक नया BigDecimal देता है ..." के बजाय "... एक BigDecimal देता है ..." एक अच्छा स्पर्श होगा। शायद मैं सिर्फ नाइटपैकिंग कर रहा हूँ, लेकिन IMHO यहाँ सुधार के लिए जगह है :-)
pauluss86

3
बस एक पक्ष ध्यान दें, BigDecimal पूरी तरह से अपरिवर्तनीय नहीं है क्योंकि इसके स्ट्रिंग की तरह अंतिम नहीं ...
Zai

@Zai लेकिन यह केवल एक कार्यान्वयन बग है, डिजाइन द्वारा नहीं। बनाए रखने योग्य कोड का शोषण नहीं करना चाहिए।
क्रिस जस्टर-यंग

1
और क्यों जावा कार्यान्वयन थोड़ा अजीब है ?! कई अन्य भाषाएं केवल सांख्यिक डेटा प्रकारों के बीच + का उपयोग करती हैं
sepehr

33

यह जावा डॉक्स से ऐसा लगता है कि यहां एक नया BigDecimal रिटर्न मिलता है:

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);

16
BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);

11

यह वास्तव में आसान नहीं है। बस यह करें:

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);

यह सभी देखें: BigDecimal#add(java.math.BigDecimal)


दिलचस्प है कि आपका जवाब मौरिस पेरी के समान है। यदि आप लिंक जोड़ना चाहते हैं, तो आपको बस उसका संपादन करना चाहिए।
forresthopkinsa

वास्तव में, मैंने इसे कॉपी नहीं किया था, लेकिन मुझे लगता है कि हम दोनों ने एक ही समय में एक ही उत्तर लिखा था (यह वैसे भी दिए गए कोड के लिए ठीक है)। मुझे सही लिंक देखने के लिए अभी एक मिनट का समय लगा है।
nfechner

वाह, यह बहुत दिलचस्प है!
forresthopkinsa

9

BigInteger अपरिवर्तनीय है, आपको यह करने की आवश्यकता है,

  BigInteger sum = test.add(new BigInteger(30));  
  System.out.println(sum);

4
//you can do in this way...as BigDecimal is immutable so cant set values except in constructor

BigDecimal test = BigDecimal.ZERO;
BigDecimal result = test.add(new BigDecimal(30));
System.out.println(result);

result would be 30

3
BigDecimal no = new BigDecimal(10); //you can add like this also
no = no.add(new BigDecimal(10));
System.out.println(no);

20


2

आप इसे इस तरह भी कर सकते हैं:

BigDecimal A = new BigDecimal("10000000000");
BigDecimal B = new BigDecimal("20000000000");
BigDecimal C = new BigDecimal("30000000000");
BigDecimal resultSum = (A).add(B).add(C);
System.out.println("A+B+C= " + resultSum);

प्रिंटों:

A + B + C = 60000000000


1

Java8 लैम्ब्डा का उपयोग करना

List<BigDecimal> items = Arrays.asList(a, b, c, .....);

items.stream().filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);

यह उन मामलों को कवर करता है जहां सूची में कुछ या सभी वस्तुएं शून्य हैं।


0
BigDecimal demo = new BigDecimal(15);

यह अपरिवर्तनीय बीक्यूज़ है जो आपको आंतरिक रूप से इनपुट (15) के रूप में संग्रहीत करता है final private final BigInteger intVal; और स्ट्रिंग निर्माण के समय उसी अवधारणा का उपयोग करता है जो हर इनपुट अंत में स्टोर करता है। private final char value[];इसमें कोई निहित बग नहीं है।


0

जोड़ने के लिए बस एक और उदाहरण BigDecimals। मुख्य बिंदु यह है कि वे अपरिवर्तनीय हैं और उन्हें केवल कंस्ट्रक्टर में आरंभीकृत किया जा सकता है। यहाँ कोड है:

import java.util.*;
import java.math.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc;
        boolean first_right_number = false;
        BigDecimal initBigDecimal = BigDecimal.ZERO;
        BigDecimal add1 = BigDecimal.ZERO;
        BigDecimal add2 = BigDecimal.ZERO;

        while (!first_right_number)
        {
            System.out.print("Enter a first single numeric value: ");
            sc = new Scanner(System.in);
            if (sc.hasNextBigDecimal()) 
            {
                first_right_number = true;
                add1 = sc.nextBigDecimal();
            }
        }

        boolean second_right_number = false;
        while (!second_right_number)
        {
            System.out.print("Enter a second single numeric value: ");
            sc = new Scanner(System.in);
            if (sc.hasNextBigDecimal()) 
            {
                second_right_number = true;
                add2 = sc.nextBigDecimal();
            }
        }
        BigDecimal result = initBigDecimal.add(add1).add(add2);
        System.out.println("Sum of the 2 numbers is: " + result.toString());
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.