我正在努力使我的应用语言依赖。用户需要输入一个浮点数。我使用EditText显示当前值并允许编辑。 准备我编码:
st = String.format("%.2f", myFloat);
edTxt = (EditText) findViewById(R.id.myEditText);
edTxt.setText(st, TextView.BufferType.EDITABLE);
edTxt.selectAll();
现在向用户显示该值。如果在我的设备的设置中,我将语言设置为Deutsch(德语),则浮点值2.80显示为2,80。在onPause的活动我检索值并将其从字符串转换为float - 并由于逗号得到NumberFormatException错误。 应该很容易我想,我只需要用点替换逗号,并编码:
String st ="";
st = edTxt.getText().toString();
st.replace(",", ".");
try{
float minV = Float.valueOf(st);
} catch (NumberFormatException nfe){
mShowAToast("NumberFormatException: " + st);
}
并且惊讶:该应用程序遇到了捕获并且toast显示为“2,80”而不是“2.80”,st.replace没有完成它的工作。 (可能是这样,但是) 我有什么监督吗?
答案 0 :(得分:2)
如果您的浮点值使用','作为小数点分隔符。您可以使用Locale类对其进行解析。请检查以下代码。
public static void main(String[] args) {
try {
// Number and NumberFormat are in java.text.*;
Number numberG = NumberFormat.getNumberInstance(java.util.Locale.GERMAN).parse("-1.234,56");
if (numberG instanceof Double) {
System.out.println(">" + numberG.doubleValue());
}
} catch (ParseException e) {
e.printStackTrace();
}
}
它将打印:
>-1234.56
因此,您可以使用您的JVM的默认语言环境:java.util.Locale.getDefault(),而不是使用java.util.Locale.GERMAN。
关于String的替换功能我已经比较了Android API和Oracle JDK的规格,两者都是相同的。所以我认为它必须回归你的期望。以防万一我在JDK中尝试了以下内容:
String value = "-1.234,56";
System.out.println(value.replace(',', '.'));
System.out.println(value.replace(",", "."));
两者都在打印:-1.234.56