2009-09-20 18 views

回答

48

0.01不是一個整數(整數),所以你當然不能把它解析爲一個。改爲使用Double.parseDoubleFloat.parseFloat

65
String s = "0.01"; 
double d = Double.parseDouble(s); 
int i = (int) d; 

例外的原因是整數不包含有理數(=基本上是分數)。所以,試圖將0.3解析爲int是無稽之談。 A doublefloat數據類型可以保存有理數。

方式的Java蒙上了doubleint完成邁向零四捨五入去掉小數點後面的部分。

int i = (int) 0.9999; 

i將被零。

+2

您的演員陣容將完全失去部分信息。我不確定這是個好主意。 – Joren 2009-09-20 13:18:39

+1

好的!也許我將不得不做這樣的事情Double d = Double.parseDouble(s);對? – 2009-09-20 13:21:19

+1

@Joren:我知道,但他想要一個整數(如果我檢查他的代碼) – 2009-09-20 13:22:02

2

使用Double.parseDouble(String a)你在找什麼不是一個整數,因爲它不是一個整數。

18

使用,

String s="0.01"; 
int i= new Double(s).intValue(); 
11
String s="0.01"; 
int i = Double.valueOf(s).intValue(); 
2

使用這一個

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

7

這種轉換實際上是Java

舉例來說,一種下列字符串令人驚訝直觀:「 100.00「

C:一個簡單的標準庫函數至少自1971年以來Where did the name `atoi` come from?

int i = atoi(decimalstring); 

Java語言:雙強制性通路(或浮動)解析,然後通過流延

int i = (int)Double.parseDouble(decimalstring); 

Java肯定有一些奇怪的是它的袖子

+0

C簡單地忽略了字符串的其餘部分,並解析它可以解析的任何內容(在本例中,它是'100')。你無法知道'atoi'是否真正解析了字符串中的所有內容,字符串是否包含數字或者數字是否溢出。 'strtol'是一個更好的選擇,可以檢測到上面所有的東西。 Java更嚴格,但它確保涵蓋所有這些情況。 – nhahtdh 2013-09-09 13:27:57

+0

我RAYWELL同意,因爲這個作品'Double.valueOf(「16543」)的intValue();'所以Java想成爲一名PITA當你想快速地轉換爲int,但雙是一個很大較爲一般。 – 2013-12-12 21:49:27

2

使用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(); 
相關問題