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的缩小原语转换™ 语言规范:这个大系统的任何部分