2012-04-24 65 views
1

在android手机中,此方法正常工作。它需要任何双数并且在点后改为两位小数。但在星系标签中,数字变为不是0.00,而是0,00。所以,当我从String转换为double时,我得到了异常。为什么它是这样的?因为平板电脑的局部性的 screenshotAndroid:奇怪的星系标签行为

回答

2

它,用在平板电脑上设定的地点的数字分隔符为,,而在其他地方(手机为例)是.

可以使用这段代码改变地方:

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Local.GERMAN); 
otherSymbols.setDecimalSeparator(','); 
otherSymbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat(formatString, otherSymbols); 

当前本地可以使用Locale.LOCALITY可以在java.util.Local

在这里找到可以得到对你是一个workaround如果你喜欢。
这是一个非常漂亮的question with related answers(包括我放在这里的)给你。

+0

或者只是指定的行为,你所希望的方式,当然是一个语言环境。 – 2012-04-24 06:28:40

+0

@JonSkeet是的,但也许他们喜欢他们住的地方:P,但这是真的。 – Serdalis 2012-04-24 06:30:27

+0

我试过这个'String rezS = twoDForm.format(d); \t if(rezS.contains(“,”)){ \t \t rezS.replace(',','。'); \t}',我试图把','换成'。',但似乎不起作用。它仍然以','返回。我会尝试更改分隔符,因为您在代码中提到 – 2012-04-24 06:32:32

0

我试图玩locale和DecimalFormat类和所有这些分隔符的东西,但问题没有解决。它给我返回了我无法解析的错误结果。因此,我通过给出包含100 * d(输入)的浮点数来使用Math.round(float),所以在结束之后,我除以100,并在分隔符后得到两位小数。

public static float roundTwoDecimals(double d) { 

    float rez = (float) (d * 100); //multiply for round 
    rez = Math.round(rez); 
    int rezInt = (int) rez; 
    rez = rezInt; //convert to int to remove unwanted tail 
    rez = rez/100; //get back to two decimals float 
    return rez; 
} 

我觉得这不是最好的主意,但它的实际工作

+0

这个想法很好,但不知道为什么123546789转换为2147483647.它失败的地方是'Math.round ()'用过。有任何想法吗? – 2012-04-25 11:10:04

+0

忘掉这个解决方案。我回到了Serdalis之一,并将语言环境改为美国(即使我不是这里的) – 2012-04-25 13:40:46

+0

没关系,它的美妙之处在于它只会改变十进制格式符号而不会改变其他任何东西:D,因此程序的其余部分将会仍然像你在当地一样行事。 – Serdalis 2012-04-25 13:44:59