Android:奇怪的星系标签行为

时间:2012-04-24 06:22:10

标签: java android galaxy-tab numberformatexception

在android手机中这种方法运行正常。它需要任何双数,并在点后改为两位小数。但在galaxy选项卡中,数字变化不是0.00,而是0,00。所以,当我从String转换为double时,我得到了异常。它为什么表现得那样? screenshot

2 个答案:

答案 0 :(得分:2)

由于平板电脑的位置,平板电脑上设置了地点,数字分隔符为,,而在其他地区(例如您的手机),则为.

您可以使用以下代码更改位置:

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

可以使用Locale.LOCALITY

中的{{1}}获取当前本地

如果您愿意,可以使用java.util.Local 这是一个非常好的workaround(包括我放在这里的那个)。

答案 1 :(得分: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;
}

我认为这不是最好的主意,但确实有效