Подтвердить что ты не робот

Как сделать Integer.parseInt() для десятичного числа?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;

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

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

int i = (int) 0.9999;

i будет нулевым.

Ответ 3

Использование

String s="0.01";
int i= new Double(s).intValue();

Ответ 4

String s="0.01";
int i = Double.valueOf(s).intValue();

Ответ 5

Этот вид преобразования на самом деле невероятно неинтуитивный в Java

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

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

int i = atoi(decimalstring);

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

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

Использование 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();