Java - jak zaokrąglić do dwóch miejsc po przecinku
Hej :D
Jak zaokrąglić wynik, żeby po przecinku zawsze były dwa miejsca np. 56.99? Próbowałam z Math.round(), ale niestety nie działa :(
Zaaokroąglanie liczb zmiennoprzecinkowych nie jest super proste i trzeba troche czasu na to poświęcić, aby to zrozumieć. Najlepiej przerobić sobie dużo przykładów i napisać kilka utili.
Ogólnie zagadnienie zmiennoprzecinkowych jest dość obszernym tematem w programowaniu i informatyce. Dla początkujących proponuje nie zagłębiać się zbytnio w szczegóły, gdyż może troszkę zniechęcić ilość informacji dostępnych na ten temat.
Przykład 1 z Math.round, mnożenie i dzielenie
Tutaj mamy metodę do zaokrąglania i kilka przykładów jej użycia. Proponuje sobie przekopiować ten przykładzik i zmodyfikować go, aby lepiej zrozumieć działanie.
public class RoundExample1 {
public static void main(String[] args) {
System.out.println(roundTo2DecimalPlace(56.990)); // 56.99
System.out.println(roundTo2DecimalPlace(56.994)); // 56.99
System.out.println(roundTo2DecimalPlace(56.995)); // 57.0
System.out.println(roundTo2DecimalPlace(56.996)); // 57.0
System.out.println(roundTo2DecimalPlace(56.999)); // 57.0
}
public static double roundTo2DecimalPlace(double value) {
return Math.round(value * 100.0) / 100.0;
}
}
Przykład 2 z BigDecimal
Precyzje mamy ustawioną do drugiego miejsca po przeciunku dlatego dla trzeciego przykładu 56.995 dostajemy: 56.99, zamiast 57.0
import java.math.BigDecimal;
import java.math.RoundingMode;
public class RoundExample2 {
public static void main(String[] args) {
System.out.println(round(56.990)); // 56.99
System.out.println(round(56.991)); // 56.99
System.out.println(round(56.995)); // 56.99
System.out.println(round(56.996)); // 57.0
System.out.println(round(56.999)); // 57.0
}
public static double round(double value) {
int precision = 2;
BigDecimal bigDecimal = new BigDecimal(value);
bigDecimal = bigDecimal.setScale(precision, RoundingMode.HALF_UP);
return bigDecimal.doubleValue();
}
}