当转换为整数时,双精度如何不四舍五入
本文关键字:双精度 何不 四舍五入 转换 整数 | 更新日期: 2023-09-27 18:37:24
当尝试运行它时,我的常量在它们 从双精度转换为 int。有没有办法避免 四舍五入?
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;
}
在我看来
,你在不应该重用activityLevel
变量的时候。我怀疑你真的activityLevel
是一个double
.
以下是您应该如何编写代码:
double[] activityLevels = new [] { 1.2, 1.375, 1.55, 1.725, 1.9 };
double activityLevel = activityLevels[lstActivityLevel.SelectedIndex - 1];
您似乎希望将activityLevel
设置为const
变体之一。这是要做的方法:
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();
整数不能有小数位,因此从 double
转换为 int
时,小数位之后的所有内容都会被删除。