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' [重复]