2012-04-26 10 views
9

Chcę skrócić float i podwójną wartość w java.Ucięcie floata i podwójnego w java

obserwuję moje wymagania: 1. jeśli mam 12.49688f, powinno być drukowane w 12.49 bez zaokrąglania 2. jeżeli jest ono 12,456 w podwójne, powinno być wydrukowane w 12.45 bez zaokrąglania 3. W dowolny przypadek, jeśli wartość jest równa 12.0, powinien być wydrukowany tylko jako 12.

Warunek 3 należy zawsze pamiętać. Powinien być zgodny z logiką obcięcia.

+0

Spójrz na: http://stackoverflow.com/questions/1976809/are-there-any-functions-for-truncating-a-double-in- java – BeRecursive

Odpowiedz

19

spróbować tej uliczne

DecimalFormat df = new DecimalFormat("##.##"); 
df.setRoundingMode(RoundingMode.DOWN); 
System.out.println(df.format(12.49688f)); 
System.out.println(df.format(12.456)); 
System.out.println(df.format(12.0)); 

Tutaj używamy formatowania dziesiętną do formatowania. Tryb round jest ustawiony na DOWN, aby nie zaokrąglał automatycznie dziesiętnego miejsca.

Oczekiwany wynik to:

12.49 
12.45 
12 
+0

Lokalizacja odnosi się do przykładu. W zależności od domyślnego ustawienia narodowego wynik wynosiłby na przykład 12,49. – Benites

1

Sprawdź java.math.BigDecimal.round(MathContext).

+0

Ta metoda nie istnieje? [Dokumenty API] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html) –

+0

@jimmycarr http://docs.oracle.com/javase/7/docs/ api/java/math/BigDecimal.html # round (java.math.MathContext) – Torben

+0

Wow ... jak to przegapiłem? Thanks @Torben –

1

spojrzeć z DecimalFormat():

DecimalFormat df = new DecimalFormat("#.##"); 
DecimalFormatSymbols dfs = new DecimalFormatSymbols(); 
dfs.setDecimalSeparator(','); 
df.setDecimalFormatSymbols(dfs); 
+1

Zmień go, aby używał '#' zamiast '0' i działał jak określony. – Dunes

4
double d = <some-value>; 
System.out.println(String.format("%.2f", d - 0.005); 
4

Mam ten sam problem przy użyciu Android, można użyć zamiast:

DecimalFormat df = new DecimalFormat("##.##"); 
df.setRoundingMode(RoundingMode.DOWN); 

ale do tego potrzebna jest API Level 9.

Innym rozwiązaniem jest szybki:

double number = 12.43543542; 
int aux = (int)(number*100);//1243 
double result = aux/100d;//12.43 
Powiązane problemy