Muszę sformatować liczbę zmiennoprzecinkową do „n” miejsc dziesiętnych.
próbował BigDecimal, ale zwracana wartość jest nieprawidłowa ...
public static float Redondear(float pNumero, int pCantidadDecimales) {
// the function is call with the values Redondear(625.3f, 2)
BigDecimal value = new BigDecimal(pNumero);
value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30)
return value.floatValue(); // but here the values is 625.3
}
Muszę zwrócić wartość zmiennoprzecinkową z określoną przeze mnie liczbą miejsc dziesiętnych.
Potrzebuję Float
zwrotu wartości nieDouble
.
String.format(java.util.Locale.US,"%.2f", floatValue);
Spójrz na DecimalFormat . Możesz go łatwo użyć do pobrania liczby i podania określonej liczby miejsc po przecinku.
Edycja : przykład
źródło
DecimalFormat
odradza się używanie konstruktora, zobacz moją odpowiedź na poprawne użycieNumberFormat
.Spróbuj, to bardzo mi pomogło
Wynik będzie zaokrąglonyCena -> 5652,26
źródło
Warto zauważyć, że
DecimalFormat
odradza się używanie konstruktora. Jawadok dla tej klasy stwierdza:https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
Musisz więc (na przykład):
źródło
Oto krótka próbka z wykorzystaniem
DecimalFormat
klasy wymienionej przez Nicka.Dane wyjściowe instrukcji print będą wynosić 12,35. Zauważ, że zaokrągli to dla ciebie.
źródło
DecimalFormat
odradza się używanie konstruktora, zobacz moją odpowiedź na poprawne użycieNumberFormat
.Trochę zaskoczyło, że nikt nie wskazał bezpośredniego sposobu, aby to zrobić, co jest dość łatwe.
Z pewnością nie robi to jednak półokrągłego zaokrąglenia.
Jeśli chodzi o to, co warto, półokrągłe zaokrąglenie będzie chaotyczne i nieprzewidywalne za każdym razem, gdy zmieszasz binarne wartości zmiennoprzecinkowe z arytmetyką 10. Jestem prawie pewien, że nie da się tego zrobić. Podstawowym problemem jest to, że wartości takiej jak 1.105 nie można dokładnie przedstawić w liczbach zmiennoprzecinkowych. Wartość zmiennoprzecinkowa będzie miała postać 1.105000000000001 lub 1.10499999999999999. Tak więc każda próba wykonania półokrągłego zaokrąglenia idzie w górę z powodu reprezentatywnych błędów kodowania.
Implementacje zmiennoprzecinkowe IEEE wykonują półokrągłe, ale robią binarne półokrągłe, a nie dziesiętne półokrągłe. Więc prawdopodobnie nic ci nie jest
źródło
pow
jest to zbyt kosztowna operacja do zaokrąglania?źródło
Jest to znacznie mniej profesjonalny i znacznie droższy sposób, ale powinien być łatwiejszy do zrozumienia i bardziej pomocny dla początkujących.
źródło
Myślę, że chcesz
i użyj wartości zwracanej do wyświetlenia.
zawsze zwróci 625,3, ponieważ jest głównie używany do obliczania czegoś.
źródło
Szukałem odpowiedzi na to pytanie, a później opracowałem metodę! :) Sprawiedliwe ostrzeżenie, zaokrągla wartość.
źródło