2009-09-20 2 views

ответ

48

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

65
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 будет на ноль.

+2

Ваш личный состав полностью потеряет дробную информацию. Я не уверен, что это хорошая идея, чтобы посоветовать. – Joren

+1

Хорошо! возможно, мне придется сделать что-то вроде этого Double d = Double.parseDouble (s); правильно? –

+1

@ Joren: Я знаю, но он хочет Integer (если я проверю его код) –

2

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

18

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

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

использовать это один

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

7

Этот вид преобразования на самом деле удивительно неинтуитивными в 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 наверняка есть некоторые странности до рукава

+0

C просто игнорировать остальную часть строки и анализировать все, что она может анализировать (в данном случае это '100').Невозможно узнать, действительно ли 'atoi' разбирал все в строке или нет, содержит ли строка число или число переполняет этот тип. 'strtol' - лучшая альтернатива, где все вещи, описанные выше, могут быть обнаружены. Java более строгая, но она гарантирует, что все эти случаи будут покрыты. – nhahtdh

+0

Я согласен с Raywell, потому что это работает 'Double.valueOf (" 16543 "). IntValue();' Итак, Java хочет быть PITA, когда вы хотите быстро преобразовать в int, но Double намного более общий. –

2

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

 Смежные вопросы

  • Нет связанных вопросов^_^