【问题标题】:How would a double NOT be rounded when converted to an int?转换为 int 时如何不舍入双精度数?
【发布时间】:2016-06-19 00:32:57
【问题描述】:

当我试图运行这个时,我的 const 正在四舍五入 从 double 转换为 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;
        }

【问题讨论】:

  • 在转换为 int 时如何不舍入双精度数?
  • 显然你不能在整数变量中使用浮点数。如果要保留浮动部分,为什么要将其转换为int?!
  • 您甚至期望在这里发生什么?它是一个整数。令人惊讶的是,它没有小数部分 o.0
  • 惊讶..!,这是一个integer,这是行为的一部分,你为什么要这样转换?
  • 看看这个Click here

标签: c# int switch-statement double


【解决方案1】:

在我看来,您不应该重复使用 activityLevel 变量。我怀疑你真的把activityLevel 变成了double

你应该如何编码:

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

【讨论】:

    【解决方案2】:

    您似乎想将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();
    

    【讨论】:

      【解决方案3】:

      整数不能有小数位,因此当从 double 转换为 int 时,小数位后的所有内容都会被删除。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-24
        • 2020-06-25
        • 1970-01-01
        • 2020-08-09
        相关资源
        最近更新 更多