2010-05-19 60 views
0

IM具有follwing問題.. 想要得到的結果浮法如何讓一個變量作爲浮點值的輸出

假設

int a= convert.toint32(textbox1.text); 
int b= convert.toint32(textbox2.text); 

float ans= math.sqrt(a*b); 
label1.text= ans.tostring(); 

輸出..

a=7 
b=3 

ans應該= 4.582 但我得到一個錯誤

不能impl將類型'double'轉換爲'float'。

請help..how我可以浮答...

+0

爲什麼你想要這個浮點而不是雙?雙精度浮點值在大多數系統上的精度更高。 – 2010-05-19 19:11:27

回答

3

更改您的代碼

double ans = math.sqrt(a*b); 
+0

或者你做: float ans =(float)math.sqrt(a * b); – MUG4N 2010-05-19 19:12:29

+0

謝謝你們......真的很讓人滿意...... – jaskirat 2010-05-19 19:12:42

+0

也許MUG4N,但我認爲真正的問題是沒有把價值轉化爲浮動,但爲什麼他使用浮動。 – 2010-05-19 19:13:46

0

你需要明確把結果作爲double具有比值範圍更大float(16位數字7):

float ans= (float)Math.Sqrt(a*b); 

但是,除非你有沒有告訴我們就用一個double的理由。

0
float ans= math.sqrt(a*b); 

應該

float ans= (float)Math.Sqrt(a*b); 

您需要顯式轉換爲float因爲信息丟失此轉換的結果,因此編譯器不會自動投給你。這樣編譯器可以確保有損轉換是有意的。

1

雙只是一個更大的浮動。 Math.Sqrt()返回一個double,而不是一個float。您可以在浮點類型中精確地表示一個雙精度數來放入更多數字,因此在您的代碼中,編譯器無法保證自動轉換不會丟失重要數據,因此是例外。

爲了解決這個問題,你有兩個選擇:

  1. 明確的轉換:float ans = (float)Math.Sqrt(a*b);
  2. 使用雙:double ans = Math.Sqrt(a*b);

在這兩個,我推薦後者。

作爲一個方面說明,反向轉換是可以的,因爲double總是可以準確地表示任何你可能在float變量中找到的東西。例如,從類型系統的角度來看,這是完美的:

float divide(int a, int b) { return a/(float)b;} 
double ans = divide(5,2); 
1

Math.sqrts返回值是雙倍的。所以,你有兩個選擇。

  1. 轉換返回雙成float像這樣: float ans = (float)Math.sqrt(a * b);
  2. 變化ANS雙類型:除非 double ans = Math.sqrt(a * b);

選項2將,在大多數情況下,是你最好的選擇你特別需要一個浮點數,因爲double是一個更高的精度值。

0

Math.Sqrt方法返回值類型double

但您試圖將此值設置爲float類型。但double沒有隱式轉換爲float。所以選擇:

  • 聲明答案doubledouble ans = Math.Sqrt(a*b)

  • 或顯式轉換結果 float類型:(float)Math.Sqrt(a*b)

1

您可以直接投射到浮動物上。

float ans = (float)Math.Sqrt(a * b); 
相關問題