В этой статье мы рассмотрели несколько способов удаления повторяющихся символов из строки в 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 .