2016-03-05 69 views
-3

當試圖運行這個時,我的const在 從double轉換爲int時變得四捨五入。有沒有辦法避免發生四捨五入?當轉換爲int時,double如何舍入?

const double ACTIVTY_LEVEL1 = 1.2; 
    const double ACTIVTY_LEVEL2 = 1.375; 
    const double ACTIVTY_LEVEL3 = 1.55; 
    const double ACTIVTY_LEVEL4 = 1.725; 
    const double ACTIVTY_LEVEL5 = 1.9;   

    int activityLevel = lstActivityLevel.SelectedIndex; 
     switch (activityLevel) 
     { 
      case 0: 
       activityLevel = Convert.ToInt32(ACTIVTY_LEVEL1); 
       break; 

      case 1: 
       activityLevel = Convert.ToInt32(ACTIVTY_LEVEL2); 
       break; 

      case 2: 
       activityLevel = Convert.ToInt32(ACTIVTY_LEVEL3); 
       break; 

      case 3: 
       activityLevel = Convert.ToInt32(ACTIVTY_LEVEL4); 
       break; 

      case 4: 
       activityLevel = Convert.ToInt32(ACTIVTY_LEVEL5); 
       break; 
     } 
+1

怎麼會當轉換爲int的雙重不進行四捨五入? – dbugger

+1

很顯然,你不能在一個整型變量中有一個浮點數。如果你想保持浮動部分,爲什麼你把它轉換爲int ?! –

+1

你甚至期望在這裏發生什麼?這是一個整數。令人驚訝的是,它沒有一個小數部分o.0 –

回答

0

整數不能有小數位,所以當轉換從doubleint你小數點後一切都被丟棄。

0

你似乎想將activityLevel設置爲const varialbe之一。這裏是做的方式:

const double ACTIVTY_LEVEL1 = 1.2; 
const double ACTIVTY_LEVEL2 = 1.375; 
const double ACTIVTY_LEVEL3 = 1.55; 
const double ACTIVTY_LEVEL4 = 1.725; 
const double ACTIVTY_LEVEL5 = 1.9; 

double activityLevel = 0; 
switch (lstActivityLevel.SelectedIndex) 
{ 
    case 0: 
     activityLevel = ACTIVTY_LEVEL1; 
     break; 

    case 1: 
     activityLevel = ACTIVTY_LEVEL2; 
     break; 

    case 2: 
     activityLevel = ACTIVTY_LEVEL3; 
     break; 

    case 3: 
     activityLevel = ACTIVTY_LEVEL4; 
     break; 

    case 4: 
     activityLevel = ACTIVTY_LEVEL5; 
     break; 
} 
lblBMRResult.Text = (BMR * activityLevel).ToString(); 
1

在我看來,你重新使用activityLevel變量時,你不應該。我懷疑你真的activityLeveldouble

這裏是你應該如何編寫這樣的:

double[] activityLevels = new [] { 1.2, 1.375, 1.55, 1.725, 1.9 }; 
double activityLevel = activityLevels[lstActivityLevel.SelectedIndex - 1];