जावा - तीसरे दशमलव मान के आधार पर दो दशमलव स्थान पर राउंड [डुप्लिकेट]

Dec 16 2020

मैं 5 वीं कक्षा के स्कूल के छात्र की तरह एक दिन के लिए इस पर बैठा हूं।

public class Tester 
{                                                          
    static String actualValue = "";
    private static DecimalFormat df2 = new DecimalFormat("#.##");  //To round off to two decimal places.
    static double regPrice = 0.0;
    static double regPrice2 = 0.0;
    
     public static void main(String[] args) 
     {
          regPrice2 = 1506.365;
          
          System.out.println("reg price 1 is: "+regPrice2);
          System.out.println("reg price 1 after rounding is is: "+round(regPrice2));
          
          regPrice = 8535.765;
          
          System.out.println("reg price  is: "+regPrice);
          System.out.println("reg price  after rounding is: "+round(regPrice));
      }
     
     public static double round(double value) 
        {         
            df2.setRoundingMode(RoundingMode.HALF_UP);
            String returnValue = df2.format(value);
            double actualValue = Double.parseDouble(returnValue);
            return actualValue;   
        }
    
}    
उत्पादन मान १ मान २
वास्तविक 1506.37 है 8535. 76
अपेक्षित होना 1506.37 है 8535. 77

पहले नंबर के लिए काम करना बंद क्यों है लेकिन दूसरे नंबर पर नहीं? मै इसे काम मे कैसे ले सकता हूँ?

जवाब

1 TomášZáluský Dec 16 2020 at 07:51

फ्लोटिंग-पॉइंट्रेसेशन के लिए धन्यवाद, जो आप सोचते हैं कि 1506.365 या 8535.765 वास्तव में आपकी अपेक्षा से थोड़ा अधिक या कम है। फ्लोटिंग-पॉइंट नंबरों को मंटिसा और एक्सपोनेंट के रूप में दर्शाया गया है। इसलिए उदाहरण के लिए 0.365 और 0.765 की गोलाई अलग-अलग होती है। हाल्ट के पास गोलाई फिर यादृच्छिक दिशा में दिखाई देती है। BigDecimalयदि आपको एक सटीक संख्या की आवश्यकता है तो उपयोग करें ।