数字格式Android 5.0

chu*_*ll0 5 android android-5.0-lollipop

在运行5.0的Android设备上查看我的应用时,我注意到了一个奇怪的错误.

在5.0之前的设备上,我的应用会在必要时将逗号添加到数字中.例如"1,234"或"100,000"

在5.0设备上,相同的代码将这些数字显示为"1234"或"100000".有没有其他人注意到这一点?

我已经包含了我的代码来格式化下面的数字 - 我不确定需要更改棒棒糖设备以显示正确的格式.

public static String formatNumber(Integer number, String prefix) {
    if (prefix == null) {
        prefix = Constants.PREFIX_SYMBOL;
    }

    StringBuilder stringBuilder = new StringBuilder(prefix);
    NumberFormat numberFormatter = NumberFormat.getIntegerInstance(new Locale("en_UK"));
    stringBuilder.append("").append(numberFormatter.format(number));

    return stringBuilder.toString();
}
Run Code Online (Sandbox Code Playgroud)

chu*_*ll0 5

所以我认为解决方法如下

public static String formatNumber(Integer number, String prefix) {
    if (prefix == null) {
        prefix = Constants.PREFIX_SYMBOL;
    }

    StringBuilder stringBuilder = new StringBuilder(prefix);
    NumberFormat numberFormatter = NumberFormat.getIntegerInstance();
    stringBuilder.append("").append(numberFormatter.format(number));

    return stringBuilder.toString();
}
Run Code Online (Sandbox Code Playgroud)

NumberFormat.getIntegerInstance();通话中删除Locale 似乎可以解决问题.这是添加的,因为在格式化这里指定的整数时,一些Locales将使用非ASCII十进制数字.我不认为我的应用程序可用的区域就是这种情况所以应该这样做.

编辑:

NumberFormat numberFormatter = NumberFormat.getIntegerInstance(new Locale("en_UK"));
Run Code Online (Sandbox Code Playgroud)

可以替换为

NumberFormat numberFormatter = NumberFormat.getIntegerInstance(new Locale("en", "GB"));
Run Code Online (Sandbox Code Playgroud)

这将防止默认语言环境使用非ASCII十进制数字.