[英]Converting String to Number in Java
如果字符串是java中的任何有效数字(比如int,long,double等),我如何将字符串转换为抽象数字。
我不会知道字符串中的数字类型,所以我不能使用特定的原始解析(如Integer.parseInt,Long.parseLong等)。 有没有通用的方法来转换它?
例如:
使用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();
}
}
两种情况:
double primitiveNumber = Double.parseDouble(input);
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.