Перейти к основному содержимому

Преобразование строки в число с плавающей запятой и обратно в Java

· 5 мин. чтения

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 .