[英]Problems with division in C#
如何檢查204/5是否大於200/5? 我嘗試使用浮點和十進制數學時遇到了困難。
使用float或decimal 會起作用......但是你需要通過至少生成一個十進制/ float / double操作數來執行浮點運算 :
decimal x = ((decimal) 204) / 5;
decimal y = ((decimal) 200) / 5;
if (x > y) // Yes!
或者使用浮點文字:
decimal x = 204m / 5;
decimal y = 200m / 5;
哪個操作數是浮點並不重要:
decimal x = 204 / 5m;
decimal y = 200 / 5m;
漂浮/雙重工作:
double x = 204d / 5;
double y = 200d / 5;
那么,如果你只使用204/5會發生什么? 好吧,請考慮以下聲明:
double x = 204 / 5;
編譯器不使用變量的類型來計算右側的類型。 可以看出,右手邊只是一個整數,通過划分兩個整數得到。 然后將結果轉換為double
並分配給x
。 問題是算術完全是用整數完成的,而你希望先前執行轉換到浮點,這樣你就可以獲得浮點結果。
將.0
或f
附加到任何數字會強制語言將該數字解釋為浮點小數:
204
是整數,
204f
是單精度浮點小數和
204.0
是雙精度浮點小數。
因此, 204/5
返回一個整數40
和204.0/5
返回一個雙精度浮點40.8
。
if (204.0/5 > 200.0/5) {
// stuff
}
或者,您可以采用數學上更簡單的路線:
if (204 > 200) {
// because you're dividing both of them by 5
}
if ((204.0 / 5.0) > (200.0 / 5.0)) {
//do stuff!
}
原因是,當你嘗試計算204/5
,它正好計算int 204 divides int 5
,結果也是C#中的int
。 你可以嘗試204m/5
,你會得到正確的答案。
if (((float)(204) / 5) > ((float)(200) / 5))
{
//Enter code here
}
else
{
//Enter code here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.