DecimalFormat 中不同设备的不同行为
Different behavior with diffrent device in DecimalFormat
我有一个 EditText
可以转换用户输入,例如,1000000 到 1,000,000。这是我用作转换器的代码:
private TextWatcher onTextChangedListener(final EditText editText) {
return new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
editText.removeTextChangedListener(this);
try {
String originalString = s.toString();
Long longval;
if (originalString.contains(",")) {
originalString = originalString.replaceAll(",", "");
}
longval = Long.parseLong(originalString);
DecimalFormat formatter = new DecimalFormat("###,###,###");
String formattedString = formatter.format(longval);
//setting text after format to EditText
editText.setText(formattedString);
editText.setSelection(editText.getText().length());
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
}
editText.addTextChangedListener(this);
}
};
}
当我在模拟器上尝试时(API 25 和 29),它运行正常,我输入的 EditText 格式正确(1,000,000),但是当我发布应用程序时,人们报告说格式变为 1.000000,然后当使用 EditText
周围的函数时,应用程序崩溃,商店崩溃报告说这是一个 NumberFormatException。什么可能导致这种情况,我该如何解决?
原来是区域设置问题,我在那里使用的代码没有提供区域设置,如果另一台设备使用不同的区域设置,则会导致不同的格式。所以我实现了这段代码:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.ENGLISH);
DecimalFormat formatter = new DecimalFormat("###,###,###", symbols);
并且在不同语言环境的设备上也能正常工作
我有一个 EditText
可以转换用户输入,例如,1000000 到 1,000,000。这是我用作转换器的代码:
private TextWatcher onTextChangedListener(final EditText editText) {
return new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
editText.removeTextChangedListener(this);
try {
String originalString = s.toString();
Long longval;
if (originalString.contains(",")) {
originalString = originalString.replaceAll(",", "");
}
longval = Long.parseLong(originalString);
DecimalFormat formatter = new DecimalFormat("###,###,###");
String formattedString = formatter.format(longval);
//setting text after format to EditText
editText.setText(formattedString);
editText.setSelection(editText.getText().length());
} catch (NumberFormatException nfe) {
nfe.printStackTrace();
}
editText.addTextChangedListener(this);
}
};
}
当我在模拟器上尝试时(API 25 和 29),它运行正常,我输入的 EditText 格式正确(1,000,000),但是当我发布应用程序时,人们报告说格式变为 1.000000,然后当使用 EditText
周围的函数时,应用程序崩溃,商店崩溃报告说这是一个 NumberFormatException。什么可能导致这种情况,我该如何解决?
原来是区域设置问题,我在那里使用的代码没有提供区域设置,如果另一台设备使用不同的区域设置,则会导致不同的格式。所以我实现了这段代码:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.ENGLISH);
DecimalFormat formatter = new DecimalFormat("###,###,###", symbols);
并且在不同语言环境的设备上也能正常工作