Java 将字符串转换为整数或int的最佳方法

Java 将字符串转换为整数或int的最佳方法,java,Java,这可能会问太多次,但 String str = "74.0"; 假设我有“74.05”,我只需要74。下面是我的一些方法 Integer.parseInt(str); //would result to java.lang.NumberFormatException (int) Double.parseDouble(str); //working new BigDecimal(str).intValue(); //I like this 我想把这个字符串(str)转换成int或Integer

这可能会问太多次,但

String str = "74.0";
假设我有
“74.05”
,我只需要
74
。下面是我的一些方法

Integer.parseInt(str); //would result to java.lang.NumberFormatException
(int) Double.parseDouble(str); //working
new BigDecimal(str).intValue(); //I like this
我想把这个字符串(
str
)转换成
int
Integer
,最好的方法是什么

在3纳秒内运行

inty=new BigDecimal(s).intValue()

运行时间为8纳秒

intx=(int)Double.parseDouble(s)

在3纳秒内运行

inty=new BigDecimal(s).intValue()

运行时间为8纳秒

intx=(int)Double.parseDouble(s)

在3纳秒内运行

inty=new BigDecimal(s).intValue()

运行时间为8纳秒

intx=(int)Double.parseDouble(s)

在3纳秒内运行

inty=new BigDecimal(s).intValue()


在8纳秒内运行
java.lang.NumberFormatException
是因为您试图将
double
文本转换为
int
类型

除了使用

Double.parseDouble("74.05");
而不是

Double.valueOf("74.05");
取决于您对
double
基本类型或
double
对象类型的需要

如果需要整数类型,可以按如下方式舍入双精度值:

Math.round(Double.parseDouble("74.05"));
或者只需将
双精度
转换为仅获取整体部分

(int)Double.parseDouble("74.05")
新的BigDecimal(str).intValue()
无疑是最差的选择,因为它可能导致Oracle文档中所述的未经检查的结果(请参见粗体):

public int intValue()

将此BigDecimal转换为int。此转换类似于Java规范第5.1.3节中定义的从double到short的缩小原语转换™ 语言规范:此BigDecimal的任何小数部分都将被丢弃,如果生成的“BigInteger”太大而无法放入int,则只返回低阶32位请注意,此转换可能会丢失有关此BigDecimal值的总体大小和精度的信息,并返回一个符号相反的结果


与问题无关,当您需要从
int
值实例化
整数时,有一种更快的方法。
从
java.lang.Integer
文档中:

公共静态整数值(int i)

返回表示指定int值的整数实例。如果不需要新的整数实例,通常应优先使用该方法而不是构造函数整数(int),因为通过缓存频繁请求的值,该方法可能会产生显著更好的空间和时间性能。此方法将始终缓存-128到127(含)范围内的值,并且可能缓存此范围之外的其他值


java.lang.NumberFormatException
是由于您试图将
double
文本转换为
int
类型

除了使用

Double.parseDouble("74.05");
而不是

Double.valueOf("74.05");
取决于您对
double
基本类型或
double
对象类型的需要

如果需要整数类型,可以按如下方式舍入双精度值:

Math.round(Double.parseDouble("74.05"));
或者只需将
双精度
转换为仅获取整体部分

(int)Double.parseDouble("74.05")
新的BigDecimal(str).intValue()
无疑是最差的选择,因为它可能导致Oracle文档中所述的未经检查的结果(请参见粗体):

public int intValue()

将此BigDecimal转换为int。此转换类似于Java规范第5.1.3节中定义的从double到short的缩小原语转换™ 语言规范:此BigDecimal的任何小数部分都将被丢弃,如果生成的“BigInteger”太大而无法放入int,则只返回低阶32位请注意,此转换可能会丢失有关此BigDecimal值的总体大小和精度的信息,并返回一个符号相反的结果


与问题无关,当您需要从
int
值实例化
整数时,有一种更快的方法。
从
java.lang.Integer
文档中:

公共静态整数值(int i)

返回表示指定int值的整数实例。如果不需要新的整数实例,通常应优先使用该方法而不是构造函数整数(int),因为通过缓存频繁请求的值,该方法可能会产生显著更好的空间和时间性能。此方法将始终缓存-128到127(含)范围内的值,并且可能缓存此范围之外的其他值


java.lang.NumberFormatException
是由于您试图将
double
文本转换为
int
类型

除了使用

Double.parseDouble("74.05");
而不是

Double.valueOf("74.05");
取决于您对
double
基本类型或
double
对象类型的需要

如果需要整数类型,可以按如下方式舍入双精度值:

Math.round(Double.parseDouble("74.05"));
或者只需将
双精度
转换为仅获取整体部分

(int)Double.parseDouble("74.05")
新的BigDecimal(str).intValue()
无疑是最差的选择,因为它可能导致Oracle文档中所述的未经检查的结果(请参见粗体):

public int intValue()

将此BigDecimal转换为int。此转换类似于Java规范第5.1.3节中定义的从double到short的缩小原语转换™ 语言规范:这个大系统的任何部分