Java - Üçüncü ondalık değere [kopya] dayalı olarak iki ondalık basamağa yuvarlayın

Dec 16 2020

Bir gündür bunun üzerinde oturuyorum, 5. sınıf öğrencisi gibi düşünüyorum.

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;   
        }
    
}    
Çıktı Değer 1 Değer 2
Gerçek 1506.37 8535. 76
Beklenen 1506.37 8535. 77

Yuvarlama neden ilk sayı için işe yarıyor ama ikincisi için değil? Bunu nasıl çalıştırabilirim?

Yanıtlar

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

Kayan noktalı temsil sayesinde, 1506.365 veya 8535.765'in aslında beklediğinizden biraz daha büyük veya daha az olduğunu düşündüğünüz şey. Kayan noktalı sayılar, mantis ve üs olarak temsil edilir. Dolayısıyla, örneğin 0.365 ve 0.765 için yuvarlama farklı şekilde yapılır. Yarıya yakın yuvarlama daha sonra rastgele yönde görünür. BigDecimalKesin bir sayıya ihtiyacınız varsa kullanın .