1. Обзор
В этом уроке мы рассмотрим множество способов преобразования String в double в Java.
2. Double.parseDouble
Мы можем преобразовать строку в double с помощью Double. parseDouble метод:
assertEquals(1.23, Double.parseDouble("1.23"), 0.000001);
3. Double.valueOf
Аналогично, мы можем преобразовать String в boxed Double с помощью метода Double.valueOf :
assertEquals(1.23, Double.valueOf("1.23"), 0.000001);
Обратите внимание, что возвращаемое значение Double.valueOf является коробочным Double . Начиная с Java 5, этот упакованный Double преобразуется компилятором в примитив double там, где это необходимо.
В общем, мы должны отдать предпочтение Double.parseDouble , так как он не требует, чтобы компилятор выполнял автоматическую распаковку.
4. DecimalFormat.parse
Когда Строка , представляющая double , имеет более сложный формат, мы можем использовать DecimalFormat .
Например, мы можем преобразовать значение валюты на основе десятичной дроби без удаления нечисловых символов:
DecimalFormat format = new DecimalFormat("\u00A4#,##0.00"); format.setParseBigDecimal(true); BigDecimal decimal = (BigDecimal) format.parse("-$1,000.57"); assertEquals(-1000.57, decimal.doubleValue(), 0.000001);
Подобно Double.value , метод DecimalFormat.parse возвращает Число , которое мы можем преобразовать в примитив double с помощью метода doubleValue . Кроме того, мы используем метод setParseBigDecimal , чтобы заставить DecimalFormat.parse вернуть BigDecimal .
Обычно Десятичный формат является более продвинутым, чем нам требуется, поэтому мы должны отдавать предпочтение Double.parseDouble или Double.valueOf вместо этого.
Чтобы узнать больше о Десятичном формате , пожалуйста, ознакомьтесь с практическим руководством по десятичному формату .
5. Недопустимые преобразования
Java предоставляет единый интерфейс для обработки недопустимых числовых строк s.
Примечательно, что Double.parseDouble , Double.valueOf и DecimalFormat.parse бросают NullPointerException , когда мы передаем null.
Аналогично, Double.parseDouble и Double.valueOf вызывают исключение NumberFormatException , когда мы передаем недопустимую строку, которая не может быть проанализирована в double (например, & ).
Наконец, DecimalFormat.parse выдает ParseException , когда мы передаем недопустимую строку.
6. Избегайте Устаревших Преобразований
До Java 9 мы могли бы создать коробочный Double из String , создав экземпляр Double :
new Double("1.23");
Начиная с версии 9, Java официально устарела этот метод.
7. Заключение
В заключение, Java предоставляет нам несколько методов для преобразования String s в double значения.
В общем, мы рекомендуем использовать Double.parseDouble , если только не требуется коробочный Double .
Исходный код этой статьи, включая примеры, можно найти на GitHub .