Как перевести string в double java
Перейти к содержимому

Как перевести string в double java

  • автор:

Как string преобразовать в double java

Чтобы в Java преобразовать строку в тип double , можно воспользоваться методом parseDouble() класса Double :

var number = Double.parseDouble("10.34"); System.out.println(number); // => 10.34 

В случае, если строку невозможно преобразовать в число типа double , будет выброшено исключение NumberFormatException :

var number = Double.parseDouble("abc"); // Exception java.lang.NumberFormatException 

Перевод String в double и наоборот

Есть строчный массив, нужно с него получить значение и перевести его в double вот так: «1.2s» = 1.2; Как это лучше сделать?

public class SimpleDotComTestDrive < public static void main (String [] args) < String[] iso_third = < "32s", "1s", "1.2s", "1.6s", "2s", "2.5s", "3s" >; String iso_string = (iso_third[1]).toString(); double iso_num = Double.valueOf(iso_string); System.out.println(iso_num); > > 

Код выдает ошибку:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1s" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at sun.misc.FloatingDecimal.parseDouble(Unknown Source) at java.lang.Double.parseDouble(Unknown Source) at java.lang.Double.valueOf(Unknown Source) at SimpleDotComTestDrive.main(SimpleDotComTestDrive.java:6) 

Изучаем преобразование строки в число Java

Часто задаваемый вопрос по типам String/int в Java: Как преобразовать тип String в тип Int ?

Решение : используя метод parseInt класса Java Integer . Метод parseInt переводит тип String в Int , и вызывает исключение NumberFormatException , если строка не может быть приведена к целочисленному значению.

Посмотрим на два коротких примера.

Обновлено: 2022-10-23 15:49:10 Сергей Бензенко автор материала

Простой пример преобразования “ string to integer” в Java

Игнорируя исключение, которое может возникнуть, всё, что нужно сделать для перевода String в int , умещается в одну строку кода:

int i = Integer.parseInt(myString);

Если строка, представленная переменной myString , является корректным целым числом, например, “1”, “200”, и т.п., она будет приведена к типу int . Если преобразование окончится неудачей, будет вызвано исключение NumberFormatException. Поэтому ваш код должен быть немного длиннее, чтобы учитывать это, как показано в следующем примере.

Изучаем преобразование строки в число Java — полный пример перевода String в int

Ниже приведен полный код примера программы. Она демонстрирует процесс перевода в Java строки в целое число и обработку возможного исключения NumberFormatException :

public class JavaStringToIntExample< public static void main (String[] args) < // String s = "fred"; // Используйте эту строку для теста исключения String s = "100"; try < // перевод String в int выполняется здесь int i = Integer.parseInt(s.trim()); // выводим значение после преобразования System.out.println("int i = " + i); > catch (NumberFormatException nfe) < System.out.println("NumberFormatException: " + nfe.getMessage()); >>>

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

В приведенном выше примере метод Integer.parseInt(s.trim()) используется для перевода строки s в целое число i в следующей строке кода:

int i = Integer.parseInt(s.trim());

Если попытка преобразования оканчивается неудачей ( например, если вы пытаетесь привести строку fred к целому типу ), то метод parseInt класса Integer вызовет исключение NumberFormatException , которое необходимо обработать в блоке try/catch .

В этом примере на самом деле не нужно использовать метод trim() класса String . Но в реальных программах он понадобится, поэтому я применил его здесь.

Преобразование строки в число Java- дополнительные замечания

Раз уж мы обсуждаем эту тему, вот несколько замечаний о классах String и Integer :

  • Метод Integer.toString(int i) используется для преобразования из типа int в класс Java String .
  • Для преобразования объекта String в объект Integer используйте метод valueOf() класса Integer вместо parseInt() .
  • Если нужно приводить строки к другим примитивным типам Java , например, long , используйте методы Long.parseLong() , и т.п.

Преобразование строки в число Java — резюме

Надеюсь, что этот пример перевода String в int в Java был полезным. Если у вас есть вопросы или замечания, оставляйте их в комментариях.

Сергей Бензенко автор-переводчик статьи « How to convert a Java String to an Int »

Как перевести string в double java

Каждый базовый тип данных занимает определенное количество байт памяти. Это накладывает ограничение на операции, в которые вовлечены различные типы данных. Рассмотрим следующий пример:

int a = 4; byte b = a; // ! Ошибка

В данном коде мы столкнемся с ошибкой. Хотя и тип byte, и тип int представляют целые числа. Более того, значение переменной a, которое присваивается переменной типа byte, вполне укладывается в диапазон значений для типа byte (от -128 до 127). Тем не менее мы сталкиваемся с ошибкой на этапе компиляции. Поскольку в данном случае мы пытаемся присвоить некоторые данные, которые занимают 4 байта, переменной, которая занимает всего один байт.

Тем не менее в программе может потребоваться, чтобы подобное преобразование было выполнено. В этом случае необходимо использовать операцию преобразования типов (операция () ):

int a = 4; byte b = (byte)a; // преобразование типов: от типа int к типу byte System.out.println(b); // 4

Операция преобразования типов предполагает указание в скобках того типа, к которому надо преобразовать значение. Например, в случае операции (byte)a , идет преобразование данных типа int в тип byte. В итоге мы получим значение типа byte.

Явные и неявные преобразования

Когда в одной операции вовлечены данные разных типов, не всегда необходимо использовать операцию преобразования типов. Некоторые виды преобразований выполняются неявно, автоматически.

Автоматические преобразования

Преобразования типов в языке Java

Стрелками на рисунке показано, какие преобразования типов могут выполняться автоматически. Пунктирными стрелками показаны автоматические преобразования с потерей точности.

Автоматически без каких-либо проблем производятся расширяющие преобразования (widening) — они расширяют представление объекта в памяти. Например:

byte b = 7; int d = b; // преобразование от byte к int

В данном случае значение типа byte, которое занимает в памяти 1 байт, расширяется до типа int, которое занимает 4 байта.

Расширяющие автоматические преобразования представлены следующими цепочками:

byte -> short -> int -> long

short -> float -> double

Автоматические преобразования с потерей точности

Некоторые преобразования могут производиться автоматически между типами данных одинаковой разрядности или даже от типа данных с большей разрядностью к типа с меньшей разрядностью. Это следующие цепочки преобразований: int -> float , long -> float и long -> double . Они производятся без ошибок, но при преобразовании мы можем столкнуться с потерей информации.

int a = 2147483647; float b = a; // от типа int к типу float System.out.println(b); // 2.14748365E9
Явные преобразования

Во всех остальных преобразованиях примитивных типов явным образом применяется операция преобразования типов. Обычно это сужающие преобразования (narrowing) от типа с большей разрядностью к типу с меньшей разрядностью:

long a = 4; int b = (int) a;

Потеря данных при преобразовании

При применении явных преобразований мы можем столкнуться с потерей данных. Например, в следующем коде у нас не возникнет никаких проблем:

int a = 5; byte b = (byte) a; System.out.println(b); // 5

Число 5 вполне укладывается в диапазон значений типа byte, поэтому после преобразования переменная b будет равна 5. Но что будет в следующем случае:

int a = 258; byte b = (byte) a; System.out.println(b); // 2

Результатом будет число 2. В данном случае число 258 вне диапазона для типа byte (от -128 до 127), поэтому произойдет усечение значения. Почему результатом будет именно число 2?

Число a, которое равно 258, в двоичном системе будет равно 00000000 00000000 00000001 00000010 . Значения типа byte занимают в памяти только 8 бит. Поэтому двоичное представление числа int усекается до 8 правых разрядов, то есть 00000010 , что в десятичной системе дает число 2.

Усечение рациональных чисел до целых

При преобразовании значений с плавающей точкой к целочисленным значениям, происходит усечение дробной части:

double a = 56.9898; int b = (int)a;

Здесь значение числа b будет равно 56, несмотря на то, что число 57 было бы ближе к 56.9898. Чтобы избежать подобных казусов, надо применять функцию округления, которая есть в математической библиотеке Java:

double a = 56.9898; int b = (int)Math.round(a);

Преобразования при операциях

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

  • если один из операндов операции относится к типу double , то и второй операнд преобразуется к типу double
  • если предыдущее условие не соблюдено, а один из операндов операции относится к типу float , то и второй операнд преобразуется к типу float
  • если предыдущие условия не соблюдены, один из операндов операции относится к типу long , то и второй операнд преобразуется к типу long
  • иначе все операнды операции преобразуются к типу int
int a = 3; double b = 4.6; double c = a+b;

Так как в операции участвует значение типа double, то и другое значение приводится к типу double и сумма двух значений a+b будет представлять тип double.

byte a = 3; short b = 4; byte c = (byte)(a+b);

Две переменных типа byte и short (не double, float или long), поэтому при сложении они преобразуются к типу int , и их сумма a+b представляет значение типа int. Поэтому если затем мы присваиваем эту сумму переменной типа byte, то нам опять надо сделать преобразование типов к byte.

Если в операциях участвуют данные типа char, то они преобразуются в int:

int d = 'a' + 5; System.out.println(d); // 102

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *