用户的语言相关浮点表示

时间:2011-10-18 21:57:07

标签: android android-edittext

我正在努力使我的应用语言依赖。用户需要输入一个浮点数。我使用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没有完成它的工作。 (可能是这样,但是) 我有什么监督吗?

1 个答案:

答案 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

相关问题