将带有点或逗号的字符串转换为浮点数

Day*_*nne 26 java

我总是喜欢在我的函数中输入数字,范围从0.1到999.9(小数部分总是用'.'分隔,如果没有小数,那么没有'.',例如9或7.

如何将此String转换为浮点值而不管本地化(某些国家使用','来分隔数字的小数部分.我总是用'.'得到它)?这取决于本地计算机设置吗?

sud*_*ode 26

Float.parseFloat()方法不依赖于语言环境.它期望一个点作为小数分隔符.如果输入中的小数点分隔符始终为点,则可以安全地使用它.

NumberFormat如果需要适应不同的语言环境,该类提供了语言环境感知的解析和格式.


Mau*_*rry 23

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator('.');
DecimalFormat format = new DecimalFormat("0.#");
format.setDecimalFormatSymbols(symbols);
float f = format.parse(str).floatValue();
Run Code Online (Sandbox Code Playgroud)

  • 否:用户可以更改英文数字的格式。 (2认同)

fla*_*hon 17

valueStr = valueStr.replace(',', '.');
return new Float(valueStr);
Run Code Online (Sandbox Code Playgroud)

完成

  • 这真的是一个糟糕的解决方案..对于大量的价值观,这可能是一个瓶颈.真是糟糕的表现! (5认同)
  • 当然,这是一个临时解决方案; 只有当你确定你得到的String double值肯定会一直使用逗号或点时,它才是安全的.否则,您可以将replaceAll(String,String)与正则表达式一起使用,以便同时匹配多种类型的可能的分隔符/分隔符; 虽然肯定会慢一些.无论如何,我不知道DecimalFormat的内部是如何工作的; 但我不知道它会更快.即使它是,但在大多数情况下,这仍然是一个完全合理的解决方案 (2认同)

小智 6

那这个呢:

Float floatFromStringOrZero(String s){
    Float val = Float.valueOf(0);
    try{
        val = Float.valueOf(s);
    } catch(NumberFormatException ex){
        DecimalFormat df = new DecimalFormat();
        Number n = null;
        try{
            n = df.parse(s);
        } catch(ParseException ex2){
        }
        if(n != null)
            val = n.floatValue();
    }
    return val;
}
Run Code Online (Sandbox Code Playgroud)


use*_*own 5

java.text.NumberFormatDecimalFormat:

 NumberFormat nf = new DecimalFormat ("990.0");
 double d = nf.parse (text);
Run Code Online (Sandbox Code Playgroud)