Math.Ceiling奇怪的行为

时间:2012-11-30 16:10:29

标签: c#

我遇到了一个奇怪的问题,我很确定我错过了什么。

decimal pages = Math.Ceiling((decimal)(927/1027));
MessageBox.Show(pages.ToString());

927/1027 = 0.902 .....所以这应该返回1对吗?

相反,我得到0。

但是当我直接将值输入到Ceiling时,

decimal pages = Math.Ceiling((decimal)(0.902));
MessageBox.Show(pages.ToString());

我按预期得到1。我错过了什么吗?

1 个答案:

答案 0 :(得分:14)

927/1027是一个整数表达式,其值为int,其值为0

如果你想要一个十进制计算,那么你应该这样做:

Math.Ceiling(927m/1027m);

m后缀表示decimal类型的文字。

但是,由于Math.Ceiling接收浮点参数作为输入,因此本身会有些奇怪。所以,如果你使用的是Math.Ceiling,那么我认为你真的想要使用浮点除法。像这样:

Math.Ceiling(927.0/1027.0);