1. Введение
Преобразование данных из Float
в String
и наоборот — обычная операция в Java. Однако множество способов сделать это может вызвать путаницу и неуверенность в выборе.
В этой статье мы продемонстрируем и сравним все доступные варианты.
2. Поплавок
в строку
Во-первых, давайте рассмотрим наиболее распространенные способы преобразования значений Float в
String
.
2.1. Конкатенация строк
Самое простое решение, которое мы можем использовать, — это объединение значения с плавающей запятой с пустой строкой
.
Давайте посмотрим на пример:
float givenFloat = 1.25f;
String result = givenFloat + "";
assertEquals("1.25", result);
Точно так же мы можем добавить объект Float
к пустой строке
и получить тот же результат. Когда мы используем объект Float
, его метод toString()
вызывается автоматически:
Float givenFloat = 1.25f;
String result = givenFloat + "";
assertEquals("1.25", result);
Если объект Float
имеет значение null, результатом конкатенации будет «нулевая» строка :
Float givenFloat = null;
String result = givenFloat + "";
assertEquals("null", result);
2.2. Поплавок.toString()
Другой вариант, который мы можем использовать, — это статический метод toString() класса
Float
для преобразования строк .
Мы можем передать либо примитивное значение float , либо объект
Float
в метод toString()
:
Float givenFloat = 1.25f;
String result = Float.toString(givenFloat);
assertEquals("1.25", result);
Если мы передадим null в качестве аргумента метода, мы получим исключение NullPointerException
во время выполнения:
Float givenFloat = null;
assertThrows(NullPointerException.class, () -> Float.toString(givenFloat));
2.3. String.valueOf()
Точно так же мы можем использовать статический метод valueOf
String
: ``
Float givenFloat = 1.25f;
String result = String.valueOf(givenFloat);
assertEquals("1.25", result);
В отличие от Float.toString()
, String.valueOf()
не будет генерировать исключение, если мы передаем null в качестве аргумента, вместо этого возвращается «null» String
:
Float givenFloat = null;
String result = String.valueOf(givenFloat);
assertEquals("null", result);
2.4. Строка.формат()
`Статический метод
format()
строки` предоставляет нам дополнительные параметры форматирования. Мы должны знать, что без ограничения количества десятичных знаков результат будет содержать конечные нули, даже если нет дробной части, как мы можем видеть в следующем примере:
Float givenFloat = 1.25f;
String result = String.format("%f", givenFloat);
assertEquals("1.250000", result);
Когда мы форматируем число с плавающей запятой, указав количество знаков после запятой, метод format()
также округляет результат :
Float givenFloat = 1.256f;
String result = String.format("%.2f", givenFloat);
assertEquals("1.26", result);
Если мы передаем null Float
, то преобразованный результат будет «null» String
:
Float givenFloat = null;
String result = String.format("%f", givenFloat);
assertEquals("null", result);
2.5. Десятичный формат
Наконец, у класса DecimalFormat
есть метод format()
, который позволяет преобразовывать значения с плавающей запятой в строки
с пользовательским форматированием . Преимущество в том, что мы можем точно определить, сколько десятичных знаков мы хотим получить в результирующей строке
.
Давайте посмотрим, как это использовать на примере:
Float givenFloat = 1.25f;
String result = new DecimalFormat("#.0000").format(givenFloat);
assertEquals("1.2500", result);
Если после применения форматирования дробной части нет, DecimalFormat
вернет целое число :
Float givenFloat = 1.0025f;
String result = new DecimalFormat("#.##").format(givenFloat);
assertEquals("1", result);
Если мы передадим null в качестве аргумента, то получим исключение IllegalArgumentException
:
Float givenFloat = null;
assertThrows(IllegalArgumentException.class, () -> new DecimalFormat("#.000").format(givenFloat));
3. Строка
для плавания
Далее давайте рассмотрим наиболее распространенные способы преобразования значений String в
Float
.
3.1. Поплавок.parseFloat()
Одним из наиболее распространенных способов является использование статического метода класса Float :
parseFloat()
. Он вернет примитивное значение с плавающей запятой
, представленное строковым
аргументом . Кроме того, начальные и конечные пробелы игнорируются:
String givenString = "1.25";
float result = Float.parseFloat(givenString);
assertEquals(1.25f, result);
Мы получаем исключение NullPointerException
, если аргумент String
равен нулю:
String givenString = null;
assertThrows(NullPointerException.class, () -> Float.parseFloat(givenString));
Если аргумент String
не содержит анализируемого числа с плавающей запятой
, мы получаем исключение NumberFormatException:
String givenString = "1.23x";
assertThrows(NumberFormatException.class, () -> Float.parseFloat(givenString));
3.2. Float.valueOf()
Точно так же мы можем использовать статический метод valueOf() класса
Float
. Разница в том, что valueOf()
возвращает объект Float
. В частности, он вызывает метод parseFloat()
и упаковывает его в объект Float
: **
**
``
String givenString = "1.25";
Float result = Float.valueOf(givenString);
assertEquals(1.25f, result);
Точно так же, если мы передаем не анализируемую String
, мы получим NumberFormatException
:
String givenString = "1.25x";
assertThrows(NumberFormatException.class, () -> Float.valueOf(givenString));
3.3. Десятичный формат
Мы также можем использовать DecimalFormat
для преобразования String
в Float
. Одним из основных преимуществ является указание пользовательских разделителей десятичной точки .
String givenString = "1,250";
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#.000");
decimalFormat.setDecimalFormatSymbols(symbols);
Float result = decimalFormat.parse(givenString).floatValue();
assertEquals(1.25f, result);
3.4. Конструктор поплавка
Наконец, мы можем использовать конструктор Float
непосредственно для преобразования. Внутри он будет использовать статический метод parseFloat() класса
Float
и создаст объект Float :
String givenString = "1.25";
Float result = new Float(givenString);
assertEquals(1.25f, result);
Начиная с Java 9, этот конструктор устарел. Вместо этого мы должны рассмотреть возможность использования других статических фабричных методов, таких как parseFloat()
или valueOf()
.
4. Вывод
В этой статье мы рассмотрели несколько способов преобразования экземпляров String
в экземпляры float
или Float
и обратно.
Для простых преобразований конкатенация String и
Float.toString()
были бы предпочтительными вариантами преобразования в String
. Если нам нужно более сложное форматирование, то DecimalFormat
— лучший инструмент для этой работы. Для преобразования строк в значения с плавающей запятой мы можем использовать Float.parseFloat()
, если нам нужен примитив с плавающей запятой
, или Float.valueOf()
, если мы предпочитаем объект Float
. Точно так же для пользовательского форматирования лучше всего подходит DecimalFormat
.
Как всегда, код этих примеров доступен на GitHub .