如果它有小数位,则将值增加1?

时间:2013-05-10 12:19:19

标签: c# rounding

我的情况是,如果

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

非常感谢。

5 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:5)

使用Math.Ceiling引用MSDN

  

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

答案 2 :(得分:3)

您正在寻找Math.Ceiling()

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

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

请注意我将15转换为double的事实,因此我避免整数除法。这很可能不是你想要的。

答案 3 :(得分:0)

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

注意:但是正如其他人已经证实的那样,我认为Math.Ceiling功能可以最好地与其他人沟通你想要的东西。

答案 4 :(得分:0)

类似的东西:

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

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

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