2012-06-09 7 views
61

Jak uzyskać podwójną wartość, która ma tylko dwie cyfry po przecinku dziesiętnym.Pokaż tylko dwie cyfry po przecinku

np

jeśli

i=348842. 
double i2=i/60000; 
tv.setText(String.valueOf(i2)); 

ten kod generowania 5.81403333.

Ale chcę tylko 5.81.

Co więc robię?

+3

To pytanie nie jest to duplikat http: // stackoverflow.com/questions/7415733/how-to-convert-double-to-2-number-after-the-dot To pytanie dotyczy formatowania; pytanie to dotyczy zmiany wartości w "podwójnym". – Raedwald

Odpowiedz

131

Użyj DecimalFormat.

DecimalFormat jest beton podklasa numberFormat że formatuje liczb dziesiętnych. Posiada szereg funkcji zaprojektowanych, aby umożliwić analizowanie i formatowanie liczb w dowolnych ustawieniach narodowych, w tym obsługę dla cyfr zachodnich, arabskich i indyjskich. Obsługuje również różne rodzaje liczb: , w tym liczby całkowite (123), numery stałoprzecinkowe (123.4), notację naukową (1,23E4), wartości procentowe (12%) i waluty (123 USD). Wszystkie te mogą być zlokalizowane.

Fragment kodu -

double i2=i/60000; 
tv.setText(new DecimalFormat("##.##").format(i2)); 

Wyjście -

5,81

+0

Nie potrzebujesz doString(), format już zwraca String. Odwiedź również http://developer.android.com/reference/java/text/DecimalFormat.html –

+1

co jeśli chcę w podwójnym formacie? –

+0

Jego podwójna wartość, którą można sformatować przy użyciu 'DecimalFormat'. Cóż, nie udało mi się nieodparcie odpowiedzieć na twoje pytanie w 100%. –

3
i=348842. 
double i2=i/60000; 
DecimalFormat dtime = new DecimalFormat("#.##"); 
i2= Double.valueOf(dtime.format(time)); 
v.setText(String.valueOf(i2)); 
78

Co powiesz na String.format("%.2f", i2)?

+1

Znacznie mniej pisania niż format dziesiętny, lmao. Dzięki. – Hobbyist

+3

Może to formatować ciąg przecinkami, w zależności od ustawień narodowych, np. wynik = 5,32 zamiast 5,32. – Michael

+0

Działa ... :) –

2

Pierwszą rzeczą, która powinna pojawić się w głowicy programisty podczas formatowania numeru w sekwencji znaków, powinna być dbałość o takie szczegóły, jak to będzie możliwe, aby odwrócić operację.

Innym aspektem jest zapewnienie prawidłowego wyniku. Więc chcesz skrócić numer lub zaokrąglić go.

Zanim zaczniesz, powinieneś zapytać siebie, czy jestem zainteresowany wartością, czy nie.

Aby osiągnąć swój cel, masz wiele opcji, ale większość z nich odnosi się do Format i Formatter, ale proponuję tylko poszukać w this answer.

+0

Odwrócić operację? Cicho odwrotnie: formatowanie liczby jako ciągu powinno być wykonywane tylko dla wyjścia systemowego, a odwrócenie go nie powinno być potrzebne w dobrze zaprojektowanym systemie. –

7

Myślę, że najlepszym i najprostszym rozwiązaniem jest (KISS):

double i = 348842; 
double i2 = i/60000; 
float k = (float) Math.round(i2 * 100)/100; 
+1

Jestem przekonany, że interesuje go * wyświetlanie * tylko 2 cyfr znaczących. Ponadto, ze względu na sposób, w jaki działa zmiennoprzecinkowy, twoje rozwiązanie nie spowoduje dokładnie w '5.81', ale coś w stylu' 5.81000000001' lub coś podobnego. – Petriborg

+3

Myślę, że to niemożliwe! Ponieważ Math.round - zwraca liczbę całkowitą, a my rzucamy ją na wartość zmiennoprzecinkową. W jaki sposób wartość float (581,0) po podzieleniu przez 100 może wynosić 5.81000000001? Czy masz przypadek testowy, który opisuje twoją opinię? – Serjio

+0

Może to być prosty kod dla programisty, Pomógł mi w krytycznej sytuacji. Dzięki kolego ... 1 upvote dla u – nmkyuppie

21

Oto ja pokaże ci, że jak zrobić dziesiętny nie krótszy, tutaj jestem krótszy It do 4 wartości po przecinku.

double value = 12.3457652133 
    value =Double.parseDouble(new DecimalFormat("##.####").format(value)); 
+0

dla zadanej tekstu do TextView np double value = +12,3457652133 textview.setText (nowa DecimalFormat ("## ## "). format (Double.parseDouble (wartość))); –

+0

To ograniczenie, powinieneś być pewien, że lokalne używane przez 'DecimalFormat' zwraca wartość dziesiętną z kropką bez przecinku, w przeciwnym razie' parseDouble' rzuci 'NumberFormatException' – Adil

5
public class MathRound { 
    public static void main(String[] args) { 

     double number1 = 10.123456; 
     double number2 = (int)Math.round(number1 * 100)/(double)100; 
     System.out.println(number2); 
    } 
}