Как сделать Integer.parseInt () для десятичного числа? - PullRequest
64 голосов
/ 20 сентября 2009

Код Java выглядит следующим образом:

String s = "0.01";
int i = Integer.parseInt(s);

Однако это вызывает исключение NumberFormatException ... Что может быть не так?

Ответы [ 9 ]

82 голосов
/ 20 сентября 2009
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;

Причиной исключения является то, что целое число не содержит рациональных чисел (= в основном дроби). Так что пытаться разобрать 0.3 в int - это нонсенс. Тип данных double или float может содержать рациональные числа.

Способ, которым Java преобразует double в int, выполняется путем удаления части после десятичного разделителя путем округления до нуля .

int i = (int) 0.9999;

i будет равен нулю.

56 голосов
/ 20 сентября 2009

0,01 не является целым числом (целое число), поэтому вы, конечно, не можете разобрать его как единое целое. Вместо этого используйте Double.parseDouble или Float.parseFloat.

25 голосов
/ 20 сентября 2009

Используйте

String s="0.01";
int i= new Double(s).intValue();
16 голосов
/ 03 апреля 2013
String s="0.01";
int i = Double.valueOf(s).intValue();
9 голосов
/ 09 сентября 2013

Этот тип преобразования удивительно неинтуитивен в Java

Возьмем, к примеру, следующую строку: "100.00"

C: простая стандартная библиотечная функция, по крайней мере, с 1971 года ( Откуда произошло название `atoi`? )

int i = atoi(decimalstring);

Java: обязательный проход с помощью двойного (или плавающего) анализа с последующим приведением

int i = (int)Double.parseDouble(decimalstring);

У Java наверняка есть какие-то странности в рукаве

4 голосов
/ 18 марта 2016

Использование BigDecimal для получения округления:

String s1="0.01";
int i1 = new BigDecimal(s1).setScale(0, RoundingMode.HALF_UP).intValueExact();

String s2="0.5";
int i2 = new BigDecimal(s2).setScale(0, RoundingMode.HALF_UP).intValueExact();
3 голосов
/ 07 мая 2018

предположим, что мы берем целое число в строке.

String s = "100"; int i = Integer.parseInt (s); или же int i = Integer.valueOf (s);

но в вашем вопросе число, которое вы пытаетесь изменить, является целым числом

Строка s = "10,00";

double d = Double.parseDouble (s);

int i = (int) d;

Таким образом, вы получите ответ о значении, которое вы пытаетесь получить.

2 голосов
/ 05 апреля 2013

используйте это

int number = (int) Double.parseDouble(s);

2 голосов
/ 20 сентября 2009

Используйте Double.parseDouble(String a) то, что вы ищете, не является целым числом, поскольку оно не является целым числом.

...