繁体   English   中英

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

[英]Converting String to Number in Java

如果字符串是java中的任何有效数字(比如int,long,double等),我如何将字符串转换为抽象数字。

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

例如:

  • 字符串 - >数字
  • “23423” - > 23423
  • “34.3” - > 34.3
  • “45364573747546” - > 45364573747546

使用NumberFormat。 Number无法实例化,因为它是一个抽象类。

 Number number = NumberFormat.getInstance().parse(string);

如果时间过长, 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();
  }
}

两种情况:

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

double primitiveNumber = Double.parseDouble(input);

  1. 如果您的输入字符串超过8个字节:您无论如何都无法将其存储在基元中,那么您可以使用Number类,但由于您需要基元,因此不太可能发生这种情况。

Double.valueOf()会很好,除非你有一个很长的数字。

最快的方法是始终使用Double.parseDouble() 如果您需要一个通用解析器来确定要使用哪个原语,而不是总是使用相同的类型,那么您将需要编写自己的原语。 一种方法是使用每个parseXxx()方法和许多try...catch语句。

对于整数:

int myInteger = Integer.parseInt("23423");

对于双打:

double myDouble = Double.parseDouble("34.3");

只要你的字符串可以是大数字(假设不超过原始的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
}

我更喜欢BigDecimal 因为它不会有尺寸和精度问题

您可以使用Double.parseDouble()将字符串转换为double。 即使字符串是整数,这也会起作用:

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 );    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM