Java-код выглядит следующим образом:Как сделать Integer.parseInt() для десятичного числа?
String s = "0.01";
int i = Integer.parseInt(s);
Однако это бросает NumberFormatException ... Что может быть неправильно?
Java-код выглядит следующим образом:Как сделать Integer.parseInt() для десятичного числа?
String s = "0.01";
int i = Integer.parseInt(s);
Однако это бросает NumberFormatException ... Что может быть неправильно?
0.01 не является целым числом (целое число), поэтому вы, конечно, не можете его разобрать. Используйте вместо этого Double.parseDouble
или Float.parseFloat
.
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
будет на ноль.
Использование Double.parseDouble(String a)
то, что вы ищете, не является целым числом, так как оно не является целым числом.
Использование,
String s="0.01";
int i= new Double(s).intValue();
String s="0.01";
int i = Double.valueOf(s).intValue();
использовать это один
int number = (int) Double.parseDouble(s);
Этот вид преобразования на самом деле удивительно неинтуитивными в Java
Возьмем для примера следующую строку: " 100,00 "
C: простая стандартная библиотечная функция по крайней мере с 1971 (Where did the name `atoi` come from?)
int i = atoi(decimalstring);
Java: обязательное прохождение по двойному (или Float) разобрать, а затем броском
int i = (int)Double.parseDouble(decimalstring);
У Java наверняка есть некоторые странности до рукава
C просто игнорировать остальную часть строки и анализировать все, что она может анализировать (в данном случае это '100').Невозможно узнать, действительно ли 'atoi' разбирал все в строке или нет, содержит ли строка число или число переполняет этот тип. 'strtol' - лучшая альтернатива, где все вещи, описанные выше, могут быть обнаружены. Java более строгая, но она гарантирует, что все эти случаи будут покрыты. – nhahtdh
Я согласен с Raywell, потому что это работает 'Double.valueOf (" 16543 "). IntValue();' Итак, Java хочет быть PITA, когда вы хотите быстро преобразовать в int, но Double намного более общий. –
Использование 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();
Ваш личный состав полностью потеряет дробную информацию. Я не уверен, что это хорошая идея, чтобы посоветовать. – Joren
Хорошо! возможно, мне придется сделать что-то вроде этого Double d = Double.parseDouble (s); правильно? –
@ Joren: Я знаю, но он хочет Integer (если я проверю его код) –