2013-05-10 96 views
1

我的情况是,如果如果它有小数点位置,则将值增加1?

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

Math.Ceiling ?: http://msdn.microsoft.com/en-us/library/vstudio/zx4t0t48.aspx – Fox32 2013-05-10 12:20:51

+0

http://stackoverflow.com/questions/904910/how-do-i-round- a-float-up-the-the-int-in-c – Steve 2013-05-10 12:21:13

+1

你的意思是像'System.Math.Ceiling'这样的东西是四舍五入吗? (子问题:如果你的数字是负数,“-3.13333”应该仍然“添加”一个,并使-4或_really_添加并使其为-3?) – 2013-05-10 12:21:19

回答

7

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

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

我可以投这个答案两次吗?非常好的四舍五入整数解决方案。 – 2013-05-10 12:37:05

5

使用Math.Ceiling报价MSDN

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

+0

虽然没有必要这么做 - 总是有一些简单的方法可以总结,而不需要浮点。 – 2013-05-10 12:22:05

+1

你是对的,但假设他有结果3.13333,他有浮点。你的代码更快,但对于初学者来说很难理解。 – 2013-05-10 12:24:34

+1

但是如果你退后一步,他没有那个结果 - 他只是想要整数除法,四舍五入。请注意,在您的版本中,您需要将其重新转换为'int' *并且*它会为非常大的数字提供“有趣”的结果,其中'float'的粒度大于整数。 – 2013-05-10 12:36:14

0

做什么你问的另一种方式将每个数字加上0.5,然后放置它(截断小数位)。恐怕我现在无法访问C#编译器来确认确切的函数调用!

注意:但是正如其他人已经证实的那样,我认为Math.Ceiling函数能够最好地向他人传达您的意图。

0

喜欢的东西:

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

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

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

您正在寻找Math.Ceiling()

将您的值转换为十进制或双精度,并且该方法的结果就是您所需要的。像:

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

请注意,我把15投给了双倍的事实,所以我避免了整数除法。这很可能不是你想要的。