当转换为整数时,双精度如何不四舍五入

本文关键字:双精度 何不 四舍五入 转换 整数 | 更新日期: 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 时,小数位之后的所有内容都会被删除。