2013-05-15 46 views
0

这里双重价值的错误是用来使用achartengine显示图我的应用程序的一个片段:Android的 - 只有在真实的设备

private void addSampleData() { 
... 
DecimalFormat twoDForm = new DecimalFormat("####.##"); 
for(i=0; i<count; i++){ 
    list[i] = Double.valueOf(twoDForm.format(list[i])); 
    mCurrentSeries.add(i, list[i]); 
} 
... 
} 

当我运行我在模拟器上的应用程序没有任何问题(与任何设备和任何API),但是当我在我的真实设备上运行应用程序时,我得到这样的错误:“Inavlid Double:29,32”,如果我看到存储在列表[]中的值,他们与“,”(29, 32 - 34,56 - ...)而不是“。”。 (29.32 - 34.56 - ...)就像在模拟器上一样。

为什么会发生这种情况?我能怎么做?

Thx提前!

回答

4

你有这个问题可能是因为你的设备的语言,只是强迫分离器成为昏迷。

DecimalFormat twoDForm = new DecimalFormat("#.##"); 
DecimalFormatSymbols dfs = new DecimalFormatSymbols(); 
dfs.setDecimalSeparator(','); 
twoDForm.setDecimalFormatSymbols(dfs); 
+0

thx,它的工作原理:) (我只改变'''') – Gimmy88

+0

@ Gimmy88不好的主意,提供的答案是一个实施,我已经建议在下面,应该遵循! +1 – 2013-05-15 10:47:19

1

它是关于十进制格式化字符。 设置您的模拟器,窗口为区域设置匈牙利语或罗马尼亚语,作为您的设备,而不是点,你将有昏迷小数分隔符!

有2种方法来解决这个问题。一个是强制一个Locale其他的只是强制一个小数分隔符。

我懒得提供完整的代码,我希望它有助于这个想法,你会快速与谷歌。

+0

Thx为答案!然而,问题是由DecimalFormat twoDForm = new DecimalFormat(“####。##”)引起的; ,因为如果我不使用它,我会得到像29.3245646457等数字,但它可以在模拟器和真实设备上使用,所以也许还有另一种方法来设置双精度值的小数位数...... – Gimmy88