如何将一个字符串转换为抽象数字,假设该字符串是Java中的任何有效数字(例如int、long、double等)。
我不知道字符串中数字的类型,因此无法使用特定的基元解析(如Integer.parseInt,Long.parseLong等)。有没有通用的方法来转换它?
例如:
- 字符串 -> 数字
- "23423" -> 23423
- "34.3" -> 34.3
- "45364573747546" -> 45364573747546
如何将一个字符串转换为抽象数字,假设该字符串是Java中的任何有效数字(例如int、long、double等)。
我不知道字符串中数字的类型,因此无法使用特定的基元解析(如Integer.parseInt,Long.parseLong等)。有没有通用的方法来转换它?
例如:
使用NumberFormat。Number不能被实例化因为它是一个抽象类。
Number number = NumberFormat.getInstance().parse(string);
NumberFormat.getInstance
返回的是一个通用的数字格式,适用于当前默认格式的地区。如果您不想根据不同的地区把 2.000
解析为 2
或 2000
,那么应该指定与输入预期格式相匹配的地区。请注意这一点。 - Hulk两种情况:
double primitiveNumber = Double.parseDouble(input);
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();
}
}
Double.valueOf()
很好用,除非你有一个非常长的数字。
valueOf()
返回的是 Double
,而不是原始类型。 - Code-Apprentice最快的方法是始终使用Double.parseDouble()
。如果您需要一个通用解析器来确定要使用哪种原始类型,而不是始终使用相同的类型,则需要编写自己的解析器。一种方法是使用每个parseXxx()
方法和大量的try...catch
语句。
我更喜欢使用BigDecimal
。因为它不会出现大小和精度问题。
对于整数:
int myInteger = Integer.parseInt("23423");
对于双精度浮点数:
double myDouble = Double.parseDouble("34.3");
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
}
你可以使用 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的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 );
}
Double.parseDouble()
。这个方法适用于上述所有示例。 - Code-ApprenticeNumber
类? - ThisaruG