【问题标题】:Increasing the value by 1 if it has decimal place?如果有小数位,则将值增加 1?
【发布时间】:2013-05-21 15:39:29
【问题描述】:

我的情况是,如果

47/15= 3.13333

我想把它转换成4,如果结果有小数我想把结果加1,现在我正在这样做

        float res = ((float)(62-15) / 15);
        if (res.ToString().Contains("."))
        {
             string digit=res.ToString().Substring(0, res.ToString().IndexOf('.'));
             int incrementDigit=Convert.ToInt16(k) + 1;


        }

我想知道 C# 中是否有任何快捷方式或内置函数,以便我可以在不实现字符串函数的情况下快速完成此操作。

非常感谢。

【问题讨论】:

标签: c# rounding


【解决方案1】:

你的意思是你想要执行整数除法,但总是四舍五入?我怀疑你想要:

public static int DivideByFifteenRoundingUp(int value) {
    return (value + 14) / 15;
}

这完全避免了使用浮点运算 - 由于整数运算向零截断的方式,它只允许对任何不是 15 的精确倍数的值进行四舍五入。

请注意,这 不适用于 负输入 - 例如,如果您传入 -15,这将返回 0。您可以使用以下方法解决此问题:

public static int DivideByFifteenRoundingUp(int value) {
    return value < 0 ? value / 15 : (value + 14) / 15;
}

【讨论】:

  • 我可以对这个答案投票两次吗?非常好的整数舍入解决方案。
【解决方案2】:

使用Math.Ceiling 引用MSDN

返回大于或等于的最小整数值 指定的十进制数。

【讨论】:

  • 虽然没有必要这样做 - 有一些简单的方法可以始终向上舍入,而根本不需要浮点数。
  • 你是对的,但假设他有结果 3.13333,他有浮点数。您的代码速度更快,但对于初学者来说很难理解。
  • 但如果你退后一步,他没有那个结果——他只是想要整数除法,四舍五入。请注意,在您的版本中,您需要转换回int 并且它会为非常大的数字提供“有趣”的结果,其中float 的粒度大于整数。跨度>
【解决方案3】:

您正在寻找Math.Ceiling()

将您拥有的值转换为 Decimal 或 Double ,该方法的结果就是您所需要的。喜欢:

double number = ((double)(62-15) / (double)15);
double result = Math.Ceiling(number);

请注意,我将 15 转换为双精度数,因此我避免了整数除法。这很可能不是您想要的。

【讨论】:

  • 这就是我所需要的“无论任何十进制值,总是四舍五入+1”谢谢
【解决方案4】:

按照您的要求进行操作的另一种方法是将每个数字加 0.5,然后将其取底(截断小数位)。恐怕我现在无法使用 C# 编译器来确认确切的函数调用!

注意:但正如其他人所证实的那样,我认为 Math.Ceiling 函数最能传达您的意图。

【讨论】:

    【解决方案5】:

    类似:

    float res = ((float)(62-15) / 15);
    
    int incrementDigit = (int)Math.Ceiling(res);
    

    int incrementDigit  = (int)(res  + 0.5f);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 2017-07-13
      • 1970-01-01
      相关资源
      最近更新 更多