2

我的情况是,如果

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# 中是否有任何快捷方式或内置函数,以便我可以在不实现字符串函数的情况下快速完成此操作。

非常感谢。

4

5 回答 5

9

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

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;
}
于 2013-05-10T12:21:41.350 回答
5

使用Math.Ceiling引用MSDN

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

于 2013-05-10T12:21:24.693 回答
4

您正在寻找Math.Ceiling().

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

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

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

于 2013-05-10T12:24:45.977 回答
0

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

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

于 2013-05-10T12:24:19.707 回答
0

就像是:

float res = ((float)(62-15) / 15);

int incrementDigit = (int)Math.Ceiling(res);

或者

int incrementDigit  = (int)(res  + 0.5f);
于 2013-05-10T12:24:32.827 回答