Java代碼如下:如何爲一個十進制數做一個Integer.parseInt()?
String s = "0.01";
int i = Integer.parseInt(s);
然而,這是拋出一個NumberFormatException異常......到底發生了什麼問題?
Java代碼如下:如何爲一個十進制數做一個Integer.parseInt()?
String s = "0.01";
int i = Integer.parseInt(s);
然而,這是拋出一個NumberFormatException異常......到底發生了什麼問題?
0.01不是一個整數(整數),所以你當然不能把它解析爲一個。改爲使用Double.parseDouble
或Float.parseFloat
。
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
例外的原因是整數不包含有理數(=基本上是分數)。所以,試圖將0.3
解析爲int是無稽之談。 A double
或float
數據類型可以保存有理數。
方式的Java蒙上了double
到int
由完成邁向零四捨五入去掉小數點後面的部分。
int i = (int) 0.9999;
i
將被零。
使用Double.parseDouble(String a)
你在找什麼不是一個整數,因爲它不是一個整數。
使用,
String s="0.01";
int i= new Double(s).intValue();
String s="0.01";
int i = Double.valueOf(s).intValue();
使用這一個
int number = (int) Double.parseDouble(s);
這種轉換實際上是Java
舉例來說,一種下列字符串令人驚訝直觀:「 100.00「
C:一個簡單的標準庫函數至少自1971年以來(Where did the name `atoi` come from?)
int i = atoi(decimalstring);
Java語言:雙強制性通路(或浮動)解析,然後通過流延
int i = (int)Double.parseDouble(decimalstring);
Java肯定有一些奇怪的是它的袖子
C簡單地忽略了字符串的其餘部分,並解析它可以解析的任何內容(在本例中,它是'100')。你無法知道'atoi'是否真正解析了字符串中的所有內容,字符串是否包含數字或者數字是否溢出。 'strtol'是一個更好的選擇,可以檢測到上面所有的東西。 Java更嚴格,但它確保涵蓋所有這些情況。 – nhahtdh 2013-09-09 13:27:57
我RAYWELL同意,因爲這個作品'Double.valueOf(「16543」)的intValue();'所以Java想成爲一名PITA當你想快速地轉換爲int,但雙是一個很大較爲一般。 – 2013-12-12 21:49:27
使用BigDecimal四捨五入:
String s1="0.01";
int i1 = new BigDecimal(s1).setScale(0, RoundingMode.HALF_UP).intValueExact();
String s2="0.5";
int i2 = new BigDecimal(s2).setScale(0, RoundingMode.HALF_UP).intValueExact();
您的演員陣容將完全失去部分信息。我不確定這是個好主意。 – Joren 2009-09-20 13:18:39
好的!也許我將不得不做這樣的事情Double d = Double.parseDouble(s);對? – 2009-09-20 13:21:19
@Joren:我知道,但他想要一個整數(如果我檢查他的代碼) – 2009-09-20 13:22:02