我不能在我的项目中使用floor功能。
什么是问题?
int numAllSms = Math.Floor( (msg4SmsPart1.Count()) / 69) + Math.Floor((msg4SmsPart2.Count()) / 69) ;
我的字符串是:
String msg4SmsPart1 = "", msg4SmsPart2 = "" ;
这是我的错误:“以下方法或属性之间的调用不明确:'System.Math.Floor(decimal)'和'System.Math.Floor(double)'”
答案 0 :(得分:3)
你至少有两个问题:
Math.Floor
将返回double
或decimal
;您正尝试将其分配给int
变量Math.Floor
时的意图。我怀疑你想要:
int numAllSms = (int) (Math.Floor(msg4SmsPart1.Count() / 69.0) +
Math.Floor((msg4SmsPart2.Count() / 69.0));
请注意使用69.0
代替69
,以便它是double
字面值,从而导致浮点除法。
目前尚不清楚您是否真的想要Floor
或Ceiling
- 在这种情况下我希望Ceiling
更合适。如p.s.w.g的回答所述,你可以对所有这些使用整数运算 - 如果你想要Ceiling
当量,你可以使用:
int numAllSms = (msg4SmsPart1.Count() + 68) / 69
+ (msg4SmsPart1.Count() + 68) / 69;
在除法之前添加68可以有效地舍入任何非整数结果。
答案 1 :(得分:3)
Math.Floor
接受并返回double
或decimal
,因此您必须将结果转换为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);
分割两个整数时,结果始终为整数。例如,7/3的结果是2。
此外,由于msg4SmsPart1
和msg4SmsPart2
是字符串,因此可以简化为:
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) ;