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. BigDecimal
Kesin bir sayıya ihtiyacınız varsa kullanın .
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'