2012-01-08 6 views
16

Я хочу преобразовать число в 2 десятичных знака (всегда показывать два десятичных знака) во время выполнения. Я попробовал некоторый код, но это только делает, как показано нижеПреобразование числа до 2 десятичных знаков в Java

20.03034 >> 20.03 
20.3 >> 20.3 (my code only rounds not converts) 

однако, я хочу, чтобы это сделать:

20.03034 >> 20.03 
20.3 >> 20.30 (convert it to two decimal places) 

Мой код ниже:

angle = a variable 
angle_screen = a variable 

DecimalFormat df = new DecimalFormat("#.##"); 
angle = Double.valueOf(df.format(angle)); 
angle_screen.setText(String.valueOf(angle) + tmp); 

Любая помощь, как для этого было бы здорово, спасибо.

+0

Ваш код некорректен. Вы конвертируете double в строку со специальным форматом. Затем вы конвертируете его в двойное, а затем конвертируете обратно в строку без указания какого-либо формата. Наверное, это неправильно. Также цель переменной tmp не очевидна. – Robert

+2

Вы должны прочитать API-интерфейс DecimalFormat, ответ есть, и это совершенно ясно. – Paul

+1

Возможный дубликат [округлить до двух значащих цифр после десятичной точки] (http://stackoverflow.com/questions/2808535/round-a-double-to-2-significant-figures-after-decimal-point) –

ответ

52

попробовать этот new DecimalFormat("#.00");

обновление:

double angle = 20.3034; 

    DecimalFormat df = new DecimalFormat("#.00"); 
    String angleFormated = df.format(angle); 
    System.out.println(angleFormated); //output 20.30 

Ваш код не использовал DecimalFormat правильно

0 в шаблоне означает обязательную цифру, то # означает дополнительную цифру ,

обновление 2: проверка пыльник ответить

Если вы хотите 0.2677 отформатированы как 0.27 вы должны использовать new DecimalFormat("0.00"); в противном случае он будет .27

+1

Это не работает:/ –

+0

Я понял .. Я обновил ответ –

+0

Да, 100% работает, спасибо –

2

Попробуйте

DecimalFormat df = new DecimalFormat("#,##0.00"); 
+0

Не работает:/ –

15

Попробуйте это: String.format("%.2f", angle);

+2

Лучший ответ для тех, у кого минимальный API ниже 24! Спасибо! :) – Necroqubus

+0

@Necroqubus Добро пожаловать! :) – Jagger

18
DecimalFormat df=new DecimalFormat("0.00"); 

Используйте этот код, чтобы получить точные две десятичные точки. Даже если значение равно 0.0, оно выдаст u 0.00 в качестве выхода.

Вместо если вы используете:

DecimalFormat df=new DecimalFormat("#.00"); 

Это обыкновение конвертировать 0.2659 в 0,27. Вы получите ответ, как .27.

+5

почему у этого нет больше голосов ?!важная информация, которая должна быть добавлена ​​к принятому ответу – sports

+0

, почему он не конвертирует мое значение с плавающей точкой 98786545/10^6 в два десятичных формата. После преобразования его в два десятичных числа я хочу сохранить его как строку. –

+0

@sports \t Требуется уровень API 24, поэтому довольно плохое решение для проектов с совместимостью – Necroqubus

Смежные вопросы