在 Java 中将字符串转换为数字

Converting String to Number in Java

如何将字符串转换为抽象数字,前提是字符串是 java 中的任何有效数字(例如 int、long、double 等)。

我不知道字符串中数字的类型,所以我不能使用特定的原始解析(如 Integer.parseInt、Long.parseLong 等)。有什么通用的方法可以转换它吗?

例如:

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
}

两种情况:

  1. 如果您输入的字符串小于 8 字节:

double primitiveNumber = Double.parseDouble(input);

  1. 如果您的输入字符串超过 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 );    
}