2012-02-23 2 views
3

Я пытаюсь преобразовать строку pprice в число с плавающей запятой. Однако атрибут цены объекта (тип плавающего pt) устанавливается как 0.00. Может ли кто-то рассказать мне, что не так?Преобразование строки в число с плавающей запятой в java

String pprice="60.0" 
String tokens[]=pprice.split("."); 
if(tokens.length>=2) 
{ 
    int a=Integer.parseInt(tokens[0]); 
    int b=Integer.parseInt(tokens[1]); 
    float a1=(float)a; 
    float b1=(float)b; 
    Float price=a1+(b1/100); 
    prod.setProductPrice(price); 
} 
else if(tokens.length==1) 
{ 
    int a=Integer.parseInt(tokens[0]); 
    float a1=(float)a; 
    prod.setProductPrice(a1); 
} 
+0

Вы действительно не хотите, чтобы рассматривать денежные значения в виде двоичных чисел с плавающей точкой, хотя: http://c2.com/cgi/wiki?FloatingPointCurrency – SamB

ответ

5

Ваша проблема здесь:

String tokens[]=pprice.split("."); 

Аргумент для разделения - это регулярное выражение и "." является регулярным выражением, которое соответствует любому персонажу. Чтобы соответствовать только точке, вам нужно избежать ее с помощью обратного слэша, а так как обратная косая черта также является специальной, вам необходимо удвоить ее.

String tokens[]=pprice.split("\\."); 

Изменить это, и ваш код должен работать.

Возможно, вам лучше использовать один из методов анализа, упомянутый в других ответах.

+0

Это сработало! Спасибо тебе большое!! Когда я попытался использовать методы анализа, упомянутые в других ответах, я получал: java.lang.NumberFormatException .. Ваш метод работал очень красиво .. я получил 60.00 !! :) – dev123

7

Использование Double.parseDouble (string) или Float.parseFloat (string);

+0

я пытался THT .. им получать java.lang. NumberFormatException – dev123

+0

Сообщение об исключении обычно включает в себя строку, которую он не смог проанализировать - может быть, что pprice адаптирован к локали (например, 60,0, а не 60,0), и если это так, вы должны использовать NumberFormat.getNumberInstance (yourLocale) .parse (pprice) .floatValue(). Что говорит об ошибке? – claesv

+0

Я использую LogCat .. он просто дал мне номер строки, который показал строку, где я написал Float.parseFloat (tokens [0]) на .. я не понимаю, почему он не работал .. когда я попробовал Float.parseFloat (pprice), я получил то же исключение .. но я понял, что это потому, что был «.». в строке. – dev123

2

Давайте попробуем float.parseFloat("60.0"); или Double.parseDouble("60.0");

2

Почему бы вам не использовать что-то вроде:

float price = Float.valueOf(pprice.trim()); 

(эквивалентно Float.parseFloat (строка))

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