我在模拟器中运行我的应用程序,一切正常,但当我在我的设备(华为u8650)中运行它时,我得到NumberFormatException:
GraphViewData[] aux2 = new GraphViewData[aux.length];
for(int i=0;i<aux.length;i++)
{
System.out.println("reps "+Repetitions+", dato "+i+" = "+aux[i]);
if(aux[i] != null)
{
try{
aux2[i]= new GraphViewData(i, Double.parseDouble(aux[i]));
}catch(Exception w)
{
Toast.makeText(this, "num: "+aux[i], Toast.LENGTH_LONG).show();
Toast.makeText(this, w.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
例外是: aux2 [i] =新的GraphViewData(i,Double.parseDouble(aux [i])); 好吧,你会认为aux [i]会有一个不正确的格式来解析为double但是所有的数字都是这样的:70.5或者像这样84 所以我不知道为什么它只在真实设备中而不是在模拟器中提供异常。
有什么建议吗?提前谢谢。
答案 0 :(得分:0)
我是由不同的语言环境引起的,它指定的小数分隔符与您使用的不同(通常需要,
并使用.
)。只需将,
替换为.
之前的通话parseDouble()
,您就可以了。
答案 1 :(得分:0)
好的,答案是使用此代码:
public double stringToDouble(String s) {
NumberFormat nf = NumberFormat.getInstance(Locale.getDefault());
nf.setGroupingUsed(false);
ParsePosition parsePosition = new ParsePosition(0);
Number n = nf.parse(s, parsePosition);
if (n == null || parsePosition.getErrorIndex() >= 0 || parsePosition.getIndex() < s.length())
{
/* not a valid number */
}
return n.doubleValue();
}
这对我有用