Java 使用格式将字符串转换为数字
我想知道是否存在将格式化的数字字符串转换为数字的现有方法,例如“123456.78”转换为123456.78 基本上,与DecimalFormat函数不同,DecimalFormat函数将双变量转换为给定格式(如“#####,####”模式)后面的字符串。我想实现与此功能相反的功能,将带有“#####,###.##”格式的字符串转换为双精度字符串。有没有API可以做到这一点Java 使用格式将字符串转换为数字,java,string-formatting,Java,String Formatting,我想知道是否存在将格式化的数字字符串转换为数字的现有方法,例如“123456.78”转换为123456.78 基本上,与DecimalFormat函数不同,DecimalFormat函数将双变量转换为给定格式(如“#####,####”模式)后面的字符串。我想实现与此功能相反的功能,将带有“#####,###.##”格式的字符串转换为双精度字符串。有没有API可以做到这一点 谢谢。这里有一个简单的方法 String number = "20,000,000"; int x = I
谢谢。这里有一个简单的方法
String number = "20,000,000";
int x = Integer.parseInt(number.replace(",", ""));
System.out.println(x);
您只需将不属于某个数字的字符替换为”
,然后将其解析为原语
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));
这是一个有点不同的双重原因,它将显示指数输出,你必须防止。上面的代码就是这样做的
df.format(x)
返回字符串,但可以使用Double.parseDouble
方法强制转换它
下面是一个使用Regex
和replace
方法的方法,如果您有多个分隔符,并且您都知道它们:
假设这里的分隔符是“-”和“,”
下面是一个简单的方法
String number = "20,000,000";
int x = Integer.parseInt(number.replace(",", ""));
System.out.println(x);
您只需将不属于某个数字的字符替换为”
,然后将其解析为原语
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));
这是一个有点不同的双重原因,它将显示指数输出,你必须防止。上面的代码就是这样做的
df.format(x)
返回字符串,但可以使用Double.parseDouble
方法强制转换它
下面是一个使用Regex
和replace
方法的方法,如果您有多个分隔符,并且您都知道它们:
假设这里的分隔符是“-”和“,”
你应该仔细看一下和。你会发现它不仅有format
方法,还有parse
等方法
做你想做的事情最简单的方法是:
NumberFormat format = NumberFormat.getInstance();
Number value = format.parse(string);
// If you specifically want a double...
double d = value.doubleValue();
您必须捕获ParseException并处理它。这取决于当字符串不表示有效数值时要执行的操作。如果是用户输入,您可能需要要求用户再次输入文本。您应该查看和。你会发现它不仅有format
方法,还有parse
等方法
做你想做的事情最简单的方法是:
NumberFormat format = NumberFormat.getInstance();
Number value = format.parse(string);
// If you specifically want a double...
double d = value.doubleValue();
您必须捕获ParseException并处理它。这取决于当字符串不表示有效数值时要执行的操作。如果是用户输入,您可能希望要求用户再次输入文本。您只想将字符串格式转换为正确格式?为什么不使用parseInt或valueOf将字符串转换为整数或double?不只是删除逗号,然后使用double.parseDouble()
工作吗?您确实检查了and,对吗?您确实注意到它不仅有格式
方法,而且还有解析
方法,比如,对吗?DecimalFormat.getNumberInstance(Locale.US).parse(“4265858.26”)。这会有帮助吗?@VGR这应该是一个答案,因为它是正确的。您只想正确转换字符串格式吗?为什么不使用parseInt或valueOf将字符串转换为整数或double?不只是删除逗号,然后使用double.parseDouble()
工作吗?您确实检查了and,对吗?您确实注意到它不仅有格式
方法,而且还有解析
方法,比如,对吗?DecimalFormat.getNumberInstance(Locale.US).parse(“4265858.26”)。这会有帮助吗?@VGR这应该是一个答案,因为它是正确的。OP要求解析为双精度,而不是int。这不是没有任何API,而是使用整数。parseInt
和字符串。替换API。此外,OP已经了解了DecimalFormat,它可以准确地完成请求的操作,即将带有逗号的数字解析为双精度,而您的答案不会这样做。谢谢,这似乎是唯一的方法。我需要考虑locale来解析字符串,因为“,”可能不是唯一的分隔符。这就是为什么我想看看是否存在采用模式格式字符串的API。@Yassinh当然,但既然您正在创建DecimalFormat,我不知道您为什么不使用它来解析字符串。OP要求解析为双精度,而不是int。这不是没有任何API,这使用的是Integer.parseInt
和String.replace
API。此外,OP已经了解了DecimalFormat,它可以准确地完成请求的操作,即将带有逗号的数字解析为双精度,而您的答案不会这样做。谢谢,这似乎是唯一的方法。我需要考虑locale来解析字符串,因为“,”可能不是唯一的分隔符。这就是为什么我想看看是否存在采用模式格式字符串的API。@Yassinh当然,但既然你正在创建一个DecimalFormat,我不知道你为什么不使用它来解析字符串。谢谢,这就是我想的。谢谢,这就是我想的