2015-12-06 3 views
1

Итак, у меня есть несколько строк java переменной длины. Это может быть от 0 до 999999999, но последние два значения всегда должны быть десятичной частью. Я хочу преобразовать эти строки в значения float. Так я думал только о том:Java String "1603" to float 16.03

String strNum = "200"; 
strNum = strNum.substring(0, strNum.length()-2) + "." + strNum.substring(str.length()-2); 
Float num = Float.parseFloat(strNum); 

Но этот метод является довольно медленным, и я хотел бы также добавить какой-нибудь способ, чтобы посмотреть, если длина больше чем 2, чтобы избежать string index out of range.

Мой вопрос: есть ли способ сделать это более чистым и быстрым способом? В противном случае я сделаю это, как я думал.

Благодаря

ответ

5

Как насчет:

float num = Integer.parseInt(strNum)/100f; 

f после 100 важно, и, если не требуется, используйте float, не Float.

+0

спасибо! Я знал, что делаю некоторые ненужные странные вещи – lpares12

+0

Кстати, у меня есть два значения, преобразованные с помощью этого метода. Значения '17.55' и' 2.62', но при добавлении они приводят к '20.169998', почему он не возвращает' 20.17'? – lpares12

+0

@ deuseux12 См. Https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems. Задачу можно обойти, указав строку формата, чтобы заставить два десятичных знака: 'printf ("%. 2f ", num)' – Andreas

0

Функция подстроки строк является дорогостоящей, поскольку она создает новый объект. Поэтому лучше сначала преобразовать его в число, а затем разделить на 100, чтобы получить желаемый результат.

float num = Integer.parseInt(strNum)/100f; 
0

Если вы уверены, что ваша строка всегда будет состоять только из цифр, что о хорошем простого

float num2 = Float.valueOf(strNum)/100; 

Хм, я набираю слишком медленно! :)

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