2013-04-03 2 views
-3

Моя проблема заключается в коде не принимает точку значное число с плавающей Так я должен делать какие-либо изменения в части кода PLS предложить мне ..как я могу сделать это, чтобы принять плавающее число ponit

{ Exception в нить "главный" java.lang.NumberFormatException: Для входной строки: "320.9"

at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at org.lrap.otc.OTCVerification.verifyOtc(OTCVerification.java:26) 

// часть кода // INT банкнота = Integer.parseInt (strArray [2] .trim());

at org.lrap.main.Main.run(Main.java:68) 

// часть кода // булево RetVal = OTCVerification.getOTCVerificationObj() verifyOtc (сообщение).

at org.lrap.main.Main.main(Main.java:111) 

просто вызов функции запуска } Спасибо и всем, кто помог мне г :-)

+0

Вы должны показать нам код также, исключений недостаточно –

ответ

1

Для входной строки:. "320,9"

в java.lang. Integer.parseInt (Unknown Source)

Использование Double.parseDouble для анализа чисел с дробями. Не Integer.parseInt.

Если вход не может быть числом, отформатированным машиной, то вы должны использовать DecimalFormat.parse с соответствующей локалью, чтобы распознавать номера, отформатированные с использованием местного соглашения (например, 320,9 в некоторых частях Европы).

0

Ну, если вы хотите число с плавающей запятой, используйте Double.parseDouble или new BigDecimal.

double target = Double.parseDouble(theString); 
// Or 
BigDecimal target = new BigDecimal(theString); 

Если вы хотите, целое число, используйте String#indexOf найти ., а затем использовать String#substring получить только цифры до ., и продолжать использовать Integer.parseInt.

int index = theString.indexOf('.'); 
if (index >= 0) { 
    theString = theString.substring(0, index); 
} 
int target = Integer.parseInt(theString); 

Или, как Mike Samuel указывает в комментариях ниже, используйте Double.parseDouble, а затем бросить в int:

int target = (int)Double.parseDouble(theString); 
+1

Не нужно гадоваться с 'indexOf' и' подстрокой', если целочисленная часть не будет вписываться в 'double' mantissa. Просто проанализируйте как «double», затем сбрасывайте на «int», который будет округлен до нуля. –

+0

@MikeSamuel: Конечно, я вижу такой подход. Я думаю, что я все еще буду изолировать строку, которую я хочу проанализировать, а затем проанализировать ее с помощью правильного метода, но, как вы говорите, это тоже должно работать. И так как вы получаете 15 цифр или около того точности в 'double', а max' int' составляет 2,147,483,647 (13 цифр), вы не должны сталкиваться с проблемами мантиссы. –

0
Integer.parseInt(String s) 

используется для преобразования допустимую строку в integer.And значение должно от -2,147,483,648 до 2,147,483,647.It не принимает никакого номера точки плавания.

Для преобразования с плавающей точкой, вы можете использовать Double.parseDouble or new BigDecimal.

0

Для преобразования «с плавающей запятой цифры», вы также должны быть осведомлены о используемой NumberFormat. Если вы конвертируете строку «320,9», вы в порядке в большинстве мест. Если ваша программа запущена на «французском» компьютере, цифра с плавающей запятой может появиться как «320,9».

Double.parse работает только с "." в качестве разделителя (правильно говоря, это зависит от sun.misc.FloatingDecimal.readJavaFormatString (String in)).Таким образом, если вы можете рассчитывать на том, что разделитель, вы хорошо с Double.parse

Если вам приходится иметь дело с обоих случаях, вы можете использовать что-то вроде этого:

final String num = "320,9"; 
final NumberFormat nf_french = NumberFormat.getInstance(Locale.FRENCH); // French Number Format (= xxx,yyy) 
final double result_french = nf_french.parse(num).doubleValue(); // => 320.9 
final NumberFormat nf_us = NumberFormat.getInstance(Locale.US); // US Number Format (= xxx.yyy) 
final double result_us = nf_us.parse(num).doubleValue(); // => 3209.0 !! 
Смежные вопросы