我该如何使用地板功能

时间:2013-12-10 16:09:43

标签: c# asp.net

我不能在我的项目中使用floor功能。

什么是问题?

int numAllSms = Math.Floor( (msg4SmsPart1.Count()) / 69) + Math.Floor((msg4SmsPart2.Count()) / 69) ;

我的字符串是:

 String msg4SmsPart1 = "", msg4SmsPart2 = "" ;

这是我的错误:“以下方法或属性之间的调用不明确:'System.Math.Floor(decimal)'和'System.Math.Floor(double)'”

3 个答案:

答案 0 :(得分:3)

你至少有两个问题:

  • Math.Floor将返回doubledecimal;您正尝试将其分配给int变量
  • 您的分部正在以整数运算方式执行,这可能不是您在使用Math.Floor时的意图。

我怀疑你想要:

int numAllSms = (int) (Math.Floor(msg4SmsPart1.Count() / 69.0) +
                       Math.Floor((msg4SmsPart2.Count() / 69.0));

请注意使用69.0代替69,以便它是double字面值,从而导致浮点除法。

目前尚不清楚您是否真的想要FloorCeiling - 在这种情况下我希望Ceiling更合适。如p.s.w.g的回答所述,你可以对所有这些使用整数运算 - 如果你想要Ceiling当量,你可以使用:

 int numAllSms = (msg4SmsPart1.Count() + 68) / 69
               + (msg4SmsPart1.Count() + 68) / 69;

在除法之前添加68可以有效地舍入任何非整数结果。

答案 1 :(得分:3)

Math.Floor接受并返回doubledecimal,因此您必须将结果转换为int才能将结果设置为int变量。您可能还打算在这里执行双重或十进制分割。最简单的方法是将69写为69.0(双精度)或69m(十进制):

int numAllSms = (int)(Math.Floor( (msg4SmsPart1.Count()) / 69m) + Math.Floor((msg4SmsPart2.Count()) / 69m));

但是,因为你已经在处理整数,所以你可以跳过调用Math.Floor并利用整数运算:

int numAllSms = (msg4SmsPart1.Count() / 69) + (msg4SmsPart2.Count() / 69);

请参阅/ Operator (C# Reference)

  

分割两个整数时,结果始终为整数。例如,7/3的结果是2。

此外,由于msg4SmsPart1msg4SmsPart2是字符串,因此可以简化为:

int numAllSms = (msg4SmsPart1.Length / 69) + (msg4SmsPart2.Length / 69);

或者只是

int numAllSms = msg4SmsPart1.Length / 69 + msg4SmsPart2.Length / 69;

答案 2 :(得分:0)

我猜你可以使用它,但结果总是0?整数除法不会返回您正在寻找的精度。您还需要将返回值强制转换为int以匹配您尝试分配给的变量。尝试将除法运算符两侧的操作数转换为double:

int numAllSms = (int)Math.Floor((double)(msg4SmsPart1.Count()) / 69) + (int)Math.Floor((double)(msg4SmsPart2.Count()) / 69) ;