Рубрики
Без рубрики

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. || Мы также посмотрели на время и пространство

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. || Мы также посмотрели на время и пространство

Автор оригинала: baeldung.

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. || Мы также посмотрели на время и пространство

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. Мы также посмотрели на время и пространство

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. || Мы также посмотрели на время и пространство

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. || Мы также посмотрели на время и пространство

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. Мы также посмотрели на время и пространство

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. || Мы также посмотрели на время и пространство

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. Мы также посмотрели на время и пространство

String truncated = String.valueOf((int) doubleValue);

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. Мы также посмотрели на время и пространство

В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в Java. || Мы также посмотрели на время и пространство

Теперь остальные подходы не так ограничены, как кастинг, но у них есть свои нюансы.

Например, другой подход заключается в использовании метода format класса String . Первый параметр метода указывает, что мы форматируем значение с плавающей запятой с нулевыми цифрами после десятичной точки:

String rounded = String.format("%.0f", doubleValue);

Метод format использует HALF_UP округление , которое округляется, если значение после дробной части равно .5 или выше. В противном случае он возвращает число перед десятичной запятой.

И хотя это просто, String.format – самый медленный способ сделать это .

4. Использование NumberFormat.format()

Класс NumberFormat также предоставляет метод format , аналогичный классу String , но NumberFormat работает быстрее, и с его помощью мы можем указать режим округления для достижения усечения или округления.

Метод setMaximumFractionDigits() сообщает форматеру, сколько дробных цифр после десятичной запятой следует включить в выходные данные:

NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(0);
String rounded = nf.format(doubleValue);

Любопытно, что Числовой формат по умолчанию не использует HALF_UP . Вместо этого он использует HALF_EVEN округление по умолчанию, что означает, что он будет округляться как обычно, за исключением .5, в этом случае он выберет ближайшее четное число .

В то время как HALF_EVEN полезен для статистического анализа, давайте использовать HALF_UP , чтобы быть последовательными:

nf.setRoundingMode(RoundingMode.HALF_UP);
String rounded = nf.format(doubleValue);

И, мы можем изменить это и добиться усечения, установив форматер для использования режима FLOOR округления вместо этого:

nf.setRoundingMode(RoundingMode.FLOOR);
String truncated = nf.format(doubleValue)

И теперь он будет усекаться, а не округляться.

5. Использование DecimalFormat.format()

Аналогично формату Number , класс DecimalFormat может использоваться для форматирования double значений. Однако вместо того, чтобы задавать формат вывода с помощью вызовов методов, мы можем сообщить форматеру, какой вывод мы хотим получить, предоставив конструктору определенный шаблон:

DecimalFormat df = new DecimalFormat("#,###");
df.setRoundingMode(RoundingMode.HALF_UP);
String rounded = df.format(doubleValue);

Шаблон “#,###” означает, что мы хотим, чтобы форматер возвращал только целочисленную часть входных данных. Это также сигнализирует о том, что мы хотим, чтобы цифры были сгруппированы в тройки, разделенные запятой.

Здесь применяются те же значения округления по умолчанию, поэтому, если мы хотим вывести усеченное значение, мы можем установить режим округления в FLOOR :

df.setRoundingMode(RoundingMode.FLOOR);
String truncated = df.format(doubleValue)

6. Использование BigDecimal.toString()

Последний подход , который мы рассмотрим, – это BigDecimal , который мы включим, потому что он превосходит NumberFormat и DecimalFormat для больших double s .

Мы можем использовать метод BigDecimal ‘s setScale , чтобы определить, хотим ли мы округлить или усечь:

double largeDouble = 345_345_345_345.56;
BigDecimal big = new BigDecimal(largeDouble);
big = big.setScale(0, RoundingMode.HALF_UP);

Помните, что BigDecimal s неизменяемы, поэтому, как и строки, нам нужно сбросить значение.

А затем мы просто вызываем BigDecimal ‘s toString :

String rounded = big.toString();

7. Заключение

В этом уроке мы рассмотрели различные способы преобразования double в String при удалении десятичных знаков. Мы предусмотрели подходы, которые выводили бы либо округленные, либо усеченные значения.

Как обычно, образцы и тесты доступны на GitHub .