1

在 android 手机中,这种方法可以正常工作。它需要任何双精度数并在点后更改为两位小数。但在星系选项卡中,数字不是 0.00,而是 0,00。所以,当我从 String 转换为 double 时,我得到了异常。为什么会这样? 截屏

4

2 回答 2

2

这是因为您的平板电脑的位置,在平板电脑上设置的位置数字分隔符是,,而在其他位置(例如您的手机)上是.

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

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

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

如果您愿意,这里有一个解决方法。
这是一个非常好的问题,并为您提供了相关答案(包括我放在这里的答案)。

于 2012-04-24T06:27:38.477 回答
0

我尝试使用语言环境和 DecimalFormat 类以及所有这些分隔符,但问题没有解决。它返回了我无法解析的错误结果。所以,我破解了它并使用Math.round(float)了 ,通过给出包含 100 * d (输入)的浮点数,所以在一轮之后,我除以这 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;
}

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

于 2012-04-24T15:07:53.253 回答