在android手机中这种方法运行正常。它需要任何双数,并在点后改为两位小数。但在galaxy选项卡中,数字变化不是0.00,而是0,00。所以,当我从String转换为double时,我得到了异常。它为什么表现得那样?
答案 0 :(得分:2)
由于平板电脑的位置,平板电脑上设置了地点,数字分隔符为,
,而在其他地区(例如您的手机),则为.
。
您可以使用以下代码更改位置:
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Local.GERMAN);
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.');
DecimalFormat df = new DecimalFormat(formatString, otherSymbols);
可以使用Locale.LOCALITY
如果您愿意,可以使用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;
}
我认为这不是最好的主意,但确实有效