Android - 如何正确地将字符串解析为浮点数(价格数字格式:整数、小数或两者兼有)

Posted

技术标签:

【中文标题】Android - 如何正确地将字符串解析为浮点数(价格数字格式:整数、小数或两者兼有)【英文标题】:Android - How to properly parse string to float (price number format: integer, decimals or both) 【发布时间】:2017-06-07 15:05:34 【问题描述】:

我正在尝试解析来自用户的输入字符串并将其转换为浮点数

String[] inputs = 
      "100",
            "100.0",
            "100.00",
            "100.00000",
            "100.1",
            "100.10",
            "100.11",
            "100.111",
            "1.0",
            "0.1",
            "0.10",
            "0.1000",
            "0.111",
            "100,00",
            "1,000.15"
    ;

    for (String input : inputs) 
        try 
            input = input.replace(",", ".");
            Float value = Float.valueOf(input);

            if (value == 0F) 
                Log.d("APP", "--> NOPE: " + value);
                continue;
            

            String oldInput = input;

            DecimalFormat dc = new DecimalFormat(value > 1F ? "#.00" : "#0.00");
            input = dc.format(value);
            value = Float.valueOf(input);

            Log.d("APP", oldInput + " -> " + value);
        
        catch (NumberFormatException e) 
            e.printStackTrace();
        
    

这给了我以下输出:

100         -> 100.0
100.0       -> 100.0
100.00      -> 100.0
100.0000    -> 100.0
100.1       -> 100.1
100.10      -> 100.1
100.11      -> 100.11
100.111     -> 100.11
1.0         -> 1.0
0.1         -> 0.1
0.10        -> 0.1
0.1000      -> 0.1
0.111       -> 0.11
100,00      -> 100.0

当我得到这样的输入字符串时出现问题:

1,000.25

抛出java.lang.NumberFormatException: multiple points 异常

    1,000.25 是有效输入吗? (来自美国的货币?) 是否有更好或更优化的输入解析方式?

【问题讨论】:

, 用于格式化,使用替换删除它 1,000.25 替换字符后是 1.000.25 这不是一个有效的浮点数,如果 ',' 只是一个视觉分隔符,您可以将 input = input.replace(",", "."); 更改为 input = input.replaceAll(",", ""); 【参考方案1】:

试试这个:

float result = Float.parseFloat(string.replaceAll(",", ""));

【讨论】:

以上是关于Android - 如何正确地将字符串解析为浮点数(价格数字格式:整数、小数或两者兼有)的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将作为 CSV 文件中字符串的浮点数/双精度数作为浮点数/双精度数导入程序?

我收到 ValueError:无法将字符串转换为浮点数:'8,900' [重复]

如何在python中将23位浮点数从字符串转换为浮点数并返回?

如何将表示为字符串的数字转换为浮点数

如何将带指数的字符串转换为浮点数?

如何将字符串转换为浮点数?