Обрезать поплавок и двойник в java

Я хочу обрезать поплавок и двойное значение в java.

Ниже приведены мои требования: 1. если у меня есть 12.49688f, оно должно быть напечатано как 12,49 без округления 2. если это 12,456 в двойном, оно должно быть напечатано как 12,45 без округления 3. В любом случае, если значение равно 12.0, он должен быть напечатан только как 12.

Условие 3 следует всегда помнить. Оно должно совпадать с логикой усечения.


person Azfar    schedule 26.04.2012    source источник
comment
Взгляните на: stackoverflow.com/questions/1976809/   -  person BeRecursive    schedule 26.04.2012
comment
Форматированная печать — это не то же самое, что усечение. Усечение изменяет значение данных. Использование вами термина «усечение» неверно и вводит в заблуждение. Я предлагаю вам соответствующим образом отредактировать заголовок и основную часть вашего вопроса. Для тех читателей, которые ищут истинное усечение, см. Есть ли какие-либо функции для усечения двойного числа в java? как прокомментировал BeRecursive.   -  person Basil Bourque    schedule 30.12.2020


Ответы (5)


попробуй это-

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));

Здесь мы используем десятичное форматирование для форматирования. Roundmode установлен на DOWN, так что он не будет автоматически округлять десятичные разряды.

Ожидаемый результат:

12.49
12.45
12
person Kshitij    schedule 26.04.2012
comment
Локализация относится к примеру. Например, в зависимости от локали по умолчанию вывод будет 12,49. - person Marcelo Benites; 15.09.2015

У меня та же проблема с Android, вместо этого вы можете использовать:

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

но для этого требуется API уровня 9.

Другое быстрое решение:

double number = 12.43543542;
int aux = (int)(number*100);//1243
double result = aux/100d;//12.43
person titusfx    schedule 11.08.2013

взгляните с DecimalFormat() :

DecimalFormat df = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(dfs);
person revo    schedule 26.04.2012
comment
Измените его, чтобы использовать # вместо 0, и он будет работать, как указано. - person Dunes; 26.04.2012

Проверить java.math.BigDecimal.round(MathContext).

person Torben    schedule 26.04.2012
comment
Кажется, такого метода не существует? Документация по API - person Eddie Curtis; 03.04.2015
comment
@jimmycarr документы .oracle.com/javase/7/docs/api/java/math/ - person Torben; 07.04.2015
comment
Вау... как я это пропустил? Спасибо @Torben - person Eddie Curtis; 07.04.2015

Попробуйте использовать DecimalFormat и установите RoundingMode, чтобы соответствовать тому, что вам нужно.

person ChadNC    schedule 26.04.2012