2010-02-24 23 views
2

在C#中,我做這樣的事情:最好的方法將一個浮點數轉換爲一個int來進行算術運算?

float a = 4.0f; 
float b = 84.5f; 
int ans = a * b; 

但是,編譯指出,鑄造,需要從浮去 - > int類型分配。當然,我可以這樣做:

int ans = (int)a * (int)b; 

但這是醜陋的和多餘的。有沒有更好的辦法?我知道在C++中我可以這樣做:

int ans = int(a * b); 

至少在眼睛上看起來好一點。但我似乎無法在C#中執行此操作。

+0

這真的取決於你最終的結果。你想要什麼類型的精度? – 2010-02-24 20:46:29

回答

9

你應該在代碼的外觀之前考慮你的應用程序的需要。做float數學到int,是不能掉以輕心。真正的問題你在最終答案中尋找什麼。

被轉換爲4,和B被轉換爲84,這是336的結果,但是如果你把它轉換爲int你做數學題之後,結果是338

被關閉通過2足夠你的?然後你要做的

int ans = (int)a * (int)b; 

// ans = 336 

如果你想338,那麼你所要做的

int ans = (int)(a * b); 

// ans = 338 

我真的會考慮你在做什麼副作用。理想情況下,你應該有一個策略,在做數學之前將兩個花車四捨五入。記住鑄造到一個int只是要減少一個十進制。所以84.9變成84.這可能會大大改變你的最終結果。你需要考慮你的應用程序需要什麼。

+0

謝謝(和其他人)的答案。我真正想要的是在乘法之後截斷它,所以後一種解決方案就是我所需要的。 – 2010-02-25 16:03:33

1

嘗試int ans = (int)(a * b);

3

int括號中爲好。

int ans = (int)(a * b); 
+2

他們被稱爲括號。 – SLaks 2010-02-24 20:36:10

+0

@SLaks,我的錯誤。 – Brandon 2010-02-24 20:38:37

+0

@SLaks你稱他們取決於你學習英語的地方。 – ScottS 2010-02-24 20:41:44

2
​​

這兩句話並不等同,會產生不同的結果。在一次的情況下,在乘法之前放棄精度,在乘法之後放棄精度。

相關問題