在Java中将字符串转换为浮点数

3
我正在尝试将字符串pprice转换为浮点数。然而,该对象的price属性(浮点类型)被设置为0.00。请问有人能告诉我哪里出了问题吗?
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);
}

你真的不想将货币值视为二进制浮点数:http://c2.com/cgi/wiki?FloatingPointCurrency - SamB
5个回答

7
使用 Double.parseDouble(string) 或 Float.parseFloat(string);

异常消息通常包含它无法解析的字符串 - 可能是pprice进行了本地化适配(例如,使用60,0而不是60.0),如果是这样,您应该使用NumberFormat.getNumberInstance(yourLocale).parse(pprice).floatValue()。错误消息说什么? - claesv
我正在使用LogCat。它给了我一行代码,显示我写的Float.parseFloat(tokens [0])的行号。 我不明白为什么它不起作用。当我尝试Float.parseFloat(pprice)时,我得到了相同的异常。但我想这是因为字符串中有一个“。”。 - dev123
1
你能在尝试解析之前打印pprice的值吗?这样我们就可以看到它无法处理的字符串了。 - claesv
所以,您的意思是Double.parseDouble(“60.0”)会导致NumberFormatException吗?那么我对Double.parseDouble的规范理解有误,或者您的SDK安装存在问题。 - claesv

5
您的问题出在这里:
    String tokens[]=pprice.split(".");

split的参数是一个正则表达式,"."是一个匹配任意单个字符的正则表达式。如果只想匹配句号,需要用反斜杠进行转义,由于反斜杠也是特殊字符,所以需要将其重复两次。
    String tokens[]=pprice.split("\\.");

修改这个,你的代码就应该可以工作了。

使用其他答案中提到的解析方法可能更好。


成功啦!!非常感谢您!!当我尝试使用其他答案中提到的解析方法时,我遇到了 java.lang.NumberFormatException 的错误。而您的方法非常好地解决了这个问题。我得到了 60.00 的结果,太棒了! :) - dev123

2
为什么不使用类似以下的方式:
float price = Float.valueOf(pprice.trim());

(相当于Float.parseFloat(string))

2

让我们尝试使用float.parseFloat("60.0");或者Double.parseDouble("60.0");


1
float urfloat=Float.parseFloat(String string)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接