2017-07-05 1416 views
0

我的C++程序需要三個整數輸入並執行一些計算,包括除法。起初,最終結果不是小數。堆棧溢出(Dividing two integers to produce a float result)搜索過了一會兒,我發現我應該增加一個(浮動),像這樣:C++整數除法到浮點數

int a; 
int b; 
float c; 

a = 5; 
b = 2; 

c = (float)a/b; 

所以我想,但我結束了我的結果是-NAN (IND)。首先,這是什麼意思?第二,我如何讓我的程序工作?

這裏是我想在我的程序中做的數學計算方式。

int v; 
int e; 
int a; 
float r; 

r = ((float)e - v)/((float)a/1000); 

編輯:對不起,我錯了。我打算在第二個例子中輸入1000,而不是c。

+0

當你在第一個例子中使用'std :: cout << c'時,你會得到什麼? – PYA

+1

不能重現,'c'對我來說是2.5。問題可能在於你如何檢查'c'的值。 –

+3

您已經顯示的第一個代碼示例中沒有任何內容會執行此操作;第二個代碼示例是無意義的,因爲它使用未初始化的變量。提供最小代碼示例,您可以將其編譯,運行並顯示問題**。 –

回答

0

你必須像你的第一個例子一樣初始化每個變量,並且給每個變量賦值。
嘗試此:

int v; 
int e; 
int a; 
int c; 
float r; 



a = 5; 
c = 2; 
e = 5; 
v = 2; 

r = ((float)e - v)/(float)a/c; 
cout << r; 
+1

雖然這可能會回答問題,包括解釋爲什麼/如何代碼是一個答案會使它更好。 – NathanOliver

1

嘗試將每個可變浮動,並看看是否能解決該問題。另外,在你的第二個例子中,你永遠不會初始化你的變量,這會導致錯誤,因爲執行是未定義的。你也忘了包含變量c。

看看,這將引發一個錯誤:

int v = 1; 
int e = 1; 
int a = 1; 
int c = 1; 
float r; 

r = ((float)e - (float)v)/(float)a/(float)c; 

此外,對於類型之間的轉換,我會建議你使用的不是「(類型)變量」「的static_cast(變量)」。這是推薦使用C++類型進行類型轉換的方式,並且它還使轉換更易於在調試時發現。你的代碼如下所示:

int v = 1; 
int e = 1; 
int a = 1; 
int c = 1; 
float r; 

r = (static_cast<float>(e) - static_cast<float>(v))/static_cast<float>(a)/static_cast<float>(c); 
+0

請注意,您甚至可以使用float r = ....作爲最後的聲明和分配。 –

+0

@HansOlsson這是真的!雖然我希望他們有代碼來獲取值,聲明值和最後一行之間的v,e,a和c的值。 – Misha