我想知道是否存在将格式化数字String转换为数字的现有方法,例如" 123,456.78"至123456.78
基本上,与DecimalFormat函数不同,后者将一个double变量转换为一个String,后面跟着一个给定的格式,例如" ###,###。##"图案。我想实现这个功能的反向,它用#" ###,###。##"转换一个字符串。格式为double。是否有API可以做到这一点?
谢谢。
答案 0 :(得分:2)
这是一种简单的方法
String number = "20,000,000";
int x = Integer.parseInt(number.replace(",", ""));
System.out.println(x);
您只需将char's
替换为不属于""
的数字,然后将其解析为基元。
String number = "20,000,000.56";
DecimalFormat df = new DecimalFormat("#");
df.setMaximumFractionDigits(5);
double x = Double.parseDouble(number.replace(",", ""));
System.out.println(df.format(x));
对于Double原因它会显示指数输出有点不同,你必须防止它。上面的代码就是这样。
df.format(x)
返回一个String,但您可以使用Double.parseDouble
方法
如果你有多个分隔符并且你知道所有分隔符,那么这是使用Regex
和replace
方法的方法:
让我们说这里的分隔符是" - "和","
double x = Double.parseDouble(number.replace("[-,]", "");
答案 1 :(得分:2)
您应该查看documentation for DecimalFormat和its superclass。您会发现它不仅包含format
方法,还包括this one等parse
方法。
做你想做的最简单的方法是:
NumberFormat format = NumberFormat.getInstance();
Number value = format.parse(string);
// If you specifically want a double...
double d = value.doubleValue();
您必须捕获ParseException并处理它。如何执行此操作取决于当字符串不表示有效数值时您想要执行的操作。如果是用户输入,您可能需要让用户再次输入文本。