2015-05-26 17 views
5
double number = Scanner.nextDouble();  
DecimalFormat df = new DecimalFormat("#.#"); 
     System.out.print (df.format(number)); 

Próbowałem powyższe do zaokrąglania mój numer do 1 miejsca po przecinku, ale w przypadkach, gdy nie ma żadnych liczb dziesiętnych, wydaje się zaokrąglić do liczby całkowitej (będzie wyświetlany na przykład 2.0 jak 2). Chcę 2,0, a także jakikolwiek inny numer wejściowy do wyświetlenia w 1 miejscu dziesiętnym. Ponadto, gdy DecimalFormat zaokrągla liczbę ujemną do 0, zmienia ją na -0. Jak mogę rozwiązać te problemy?Java dziwne zaokrąglenie z DecimalFormat

+0

Dla '-0.0' patrz http: // stackoverflow ty. com/questions/11929096/negative-sign-in-case-of-zero-in-java - maybe -0.01. Nie zdziwiłbym się, gdyby w języku Java 8 problem został rozwiązany. –

Odpowiedz

3

Jako ciąg formatu używaj "0.0". # oznacza cyfrę, lub puste, jeśli zero, czyli to, co widzisz.

Aby pozbyć się znaku, spójrz na this answer.

+1

Dzięki, teraz zwraca 0,0 dla 0, ale wciąż mam problem, że zaokrągla liczby ujemne bliskie 0 do -0.0 teraz:/ –

+0

Dodałem link do odpowiedzi - Mam nadzieję, że to pomaga. –

0

Nic nie jest dziwne w wynikach. Format jest po prostu niezgodny z wymaganiami.

W DecimalFormat# wypisze znak tylko w swoim określonym miejscu dziesiętnym, jeśli ma to sens. Tak więc 10.00 będzie po prostu 10. Jeśli chcesz, aby miejsca dziesiętne były znaczące, musisz użyć 0.

new DecimalFormat("#.0"); 

Przykładowe wyjście dla tego byłoby:

0.11 - .1 
10.00 - 10.0 
10.4545 - 10.5 
.00 - .0 
455 - 455.0 

Jeśli chcesz 0 przed zbyt przecinku, a następnie użytkownik może #0.0

Powiązane problemy