1

我无法将 a 转换String s="45,333"为 long 或 double 之类的数字。谁能帮我解决这个问题..我添加了模型片段,当我尝试运行它显示的代码时NumberFormatException..

public static void main(String args[])
{
long a=85200;
NumberFormat numberFormat=NumberFormat.getNumberInstance();
String s=numberFormat.format(a);
Long l=Long.parseLong(s.toString());
System.out.println("The value:"+s);
System.out.println("The value of long:"+l);
}
4

4 回答 4

14

考虑NumberFormat.parse()方法而不是Long.parseLong().

Long.parseLong()期望String里面没有任何格式符号。

于 2012-04-19T10:39:23.303 回答
3

混和不是一个好主意NumberFormatLong.parseLong()

NumberFormat可以感知区域设置(在您的示例中,它使用您计算机的默认区域设置)或者您可以显式指定格式模式,而子类的parseXXX()方法Number仅读取“普通”数字(可选减号+数字)。

如果你用 格式化它NumberFormat,你应该用NumberFormat.parse()它来解析它。但是,您不应该依赖默认语言环境,而是尝试指定一个(或DecimalFormat与模式一起使用)。否则,您可能会遇到一些令人讨厌且难以检测的错误。

如果您不关心格式,请考虑使用Long.toString()将长值转换为字符串并将Long.parseLong()其转换回来。它更易于使用、线程安全(与 不同NumberFormat)并且在任何地方都一样。

于 2012-04-19T10:40:09.560 回答
2

正如所指出的,您可以NumberFormat.parse()像这样使用:

public static void main(String args[]) {
    long a=85200;
    NumberFormat numberFormat=NumberFormat.getNumberInstance();
    String s=numberFormat.format(a);
    Long l;
    try {
        l = numberFormat.parse(s.toString()).longValue();
    } catch (ParseException ex) {
        l = 0L;
        // Handle exception
    }
    System.out.println("The value:"+s);
    System.out.println("The value of long:"+l);
}
于 2012-04-19T10:43:07.513 回答
-1
long l = Long.valueOf(s);
System.out.println("The value of long:"+l);
于 2014-05-14T14:18:06.157 回答