将String转换为Integer或int

时间:2015-08-07 14:13:05

标签: 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)转换为intInteger,最好的方法是什么?

4 个答案:

答案 0 :(得分:2)

java.lang.NumberFormatException是因为您尝试将double文字转换为int类型。

没有最佳方式,但使用

Double.parseDouble("74.05");

而不是

Double.valueOf("74.05");

取决于您对double基元类型或Double对象类型的需求。

如果需要整数类型,可以将double值舍入为:

Math.round(Double.parseDouble("74.05"));

或简单地转换double以仅获取整数部分

(int)Double.parseDouble("74.05")

new BigDecimal(str).intValue();肯定是最差的选择,因为可以导致 Oracle 文档中所述的不可预见的结果(请参阅粗体):

  

public int intValue()

     

将此BigDecimal转换为int。这种转换类似于Java™语言规范第5.1.3节中定义的从double到short的缩小原语转换:该BigDecimal的任何小数部分都将被丢弃,如果得到的" BigInteger"太大而不适合int,只返回低位32位。 请注意,此转换可能会丢失有关此BigDecimal值的整体幅度和精度的信息,并返回符号相反的结果

与此问题无关,当您需要从Integer值实例化int时,有时更快方式。 来自java.lang.Integer class文档:

  

public static Integer valueOf(int i)

     

返回表示指定int值的Integer实例。如果不需要新的Integer实例,通常应优先使用此方法,而不是构造函数Integer(int),因为此方法可能通过缓存频繁请求的值来显着提高空间和时间性能。此方法将始终缓存-128到127(包括端点)范围内的值,并可以缓存此范围之外的其他值。

答案 1 :(得分:1)

int x = (int) Double.parseDouble(s);

跑了3纳秒,

int y = new BigDecimal(s).intValue();

跑了8纳秒

答案 2 :(得分:0)

一个非常不正统的解决方案是:

Integer.parseInt(str.split("\\.")[0]);

但它适用于像#34; 74.09"和#34; 74"等等

答案 3 :(得分:0)

怎么样

Integer myNum = Integer.parseInt(str.substring(0,str.indexOf(“。”));

因为OP明确要求不舍入

相关问题