在 Java 中将字符串转换为数字
Converting String to Number in Java
如何将字符串转换为抽象数字,前提是字符串是 java 中的任何有效数字(例如 int、long、double 等)。
我不知道字符串中数字的类型,所以我不能使用特定的原始解析(如 Integer.parseInt、Long.parseLong 等)。有什么通用的方法可以转换它吗?
例如:
- 字符串 -> 数字
- "23423" -> 23423
- "34.3" -> 34.3
- “45364573747546”-> 45364573747546
Double.valueOf()
就可以了,除非你的号码很长。
最快的方法就是始终使用 Double.parseDouble()
。如果您需要一个 general-purpose 解析器来确定要使用的原语,而不是总是使用相同的类型,那么您将需要编写自己的。一种方法是使用每个 parseXxx()
方法和大量 try...catch
语句。
使用数字格式。数字无法实例化,因为它是抽象的 class。
Number number = NumberFormat.getInstance().parse(string);
对于整数:
int myInteger = Integer.parseInt("23423");
双打:
double myDouble = Double.parseDouble("34.3");
Double
如果太长会使您的值失去精度。
您应该改用 BigDecimal
:
BigDecimal number = new BigDecimal("43.256");
然后您可以像这样获得不同的图元:
try {
int intValue = number.intValueExact();
} catch (ArithmeticException e) {
try {
long longValue = number.longValueExact();
} catch (ArithmeticException e) {
double doubleValue = number.doubleValue();
}
}
只要你的字符串可以是大数字(假设不超过原始 long 和 double),那么通用方式可以决定它是 long 还是 double。
Number n = Double.valueOf(string);
if((double)n.intValue() == n.doubleValue()){
//n is double use n.doubleValue() or just use the n for generic purposes
}
else{
//n is int use n.intValue() or just use the n for generic purposes
}
两种情况:
- 如果您输入的字符串小于 8 字节:
double primitiveNumber = Double.parseDouble(input);
- 如果您的输入字符串超过 8 个字节:无论如何您都无法将其存储在原语中,那么您可以使用 Number class,但这不太可能发生,因为您期望的是原语。
我只喜欢 BigDecimal
。因为它不会有尺寸和精度的问题
您可以使用 Double.parseDouble() 将您的字符串转换为双精度。即使字符串是整数,这也会起作用:
String myString = "1234.56";
double myDouble = Double.parseDouble(myString);
如果您需要检查它是整数还是双精度:
String myString = "1234.56";
int myInt;
double myDouble = Double.parseDouble(myString);
if ((myDouble % 1) == 0) {
myInt = (int) myDouble;
System.out.println("myString is an integer: " + myInt );
} else {
System.out.println("myString is a double: " + myDouble );
}
或者您可以使用 Guava's DoubleMath.isMathematicalInteger():
String myString = "1234.56";
int myInt;
double myDouble = Double.parseDouble(myString);
if (DoubleMath.isMathematicalInteger(myDouble)) {
myInt = (int) myDouble;
System.out.println("myString is an integer: " + myInt );
} else {
System.out.println("myString is a double: " + myDouble );
}
如何将字符串转换为抽象数字,前提是字符串是 java 中的任何有效数字(例如 int、long、double 等)。
我不知道字符串中数字的类型,所以我不能使用特定的原始解析(如 Integer.parseInt、Long.parseLong 等)。有什么通用的方法可以转换它吗?
例如:
- 字符串 -> 数字
- "23423" -> 23423
- "34.3" -> 34.3
- “45364573747546”-> 45364573747546
Double.valueOf()
就可以了,除非你的号码很长。
最快的方法就是始终使用 Double.parseDouble()
。如果您需要一个 general-purpose 解析器来确定要使用的原语,而不是总是使用相同的类型,那么您将需要编写自己的。一种方法是使用每个 parseXxx()
方法和大量 try...catch
语句。
使用数字格式。数字无法实例化,因为它是抽象的 class。
Number number = NumberFormat.getInstance().parse(string);
对于整数:
int myInteger = Integer.parseInt("23423");
双打:
double myDouble = Double.parseDouble("34.3");
Double
如果太长会使您的值失去精度。
您应该改用 BigDecimal
:
BigDecimal number = new BigDecimal("43.256");
然后您可以像这样获得不同的图元:
try {
int intValue = number.intValueExact();
} catch (ArithmeticException e) {
try {
long longValue = number.longValueExact();
} catch (ArithmeticException e) {
double doubleValue = number.doubleValue();
}
}
只要你的字符串可以是大数字(假设不超过原始 long 和 double),那么通用方式可以决定它是 long 还是 double。
Number n = Double.valueOf(string);
if((double)n.intValue() == n.doubleValue()){
//n is double use n.doubleValue() or just use the n for generic purposes
}
else{
//n is int use n.intValue() or just use the n for generic purposes
}
两种情况:
- 如果您输入的字符串小于 8 字节:
double primitiveNumber = Double.parseDouble(input);
- 如果您的输入字符串超过 8 个字节:无论如何您都无法将其存储在原语中,那么您可以使用 Number class,但这不太可能发生,因为您期望的是原语。
我只喜欢 BigDecimal
。因为它不会有尺寸和精度的问题
您可以使用 Double.parseDouble() 将您的字符串转换为双精度。即使字符串是整数,这也会起作用:
String myString = "1234.56";
double myDouble = Double.parseDouble(myString);
如果您需要检查它是整数还是双精度:
String myString = "1234.56";
int myInt;
double myDouble = Double.parseDouble(myString);
if ((myDouble % 1) == 0) {
myInt = (int) myDouble;
System.out.println("myString is an integer: " + myInt );
} else {
System.out.println("myString is a double: " + myDouble );
}
或者您可以使用 Guava's DoubleMath.isMathematicalInteger():
String myString = "1234.56";
int myInt;
double myDouble = Double.parseDouble(myString);
if (DoubleMath.isMathematicalInteger(myDouble)) {
myInt = (int) myDouble;
System.out.println("myString is an integer: " + myInt );
} else {
System.out.println("myString is a double: " + myDouble );
}