【问题标题】:How can i solve a Math error between decimal and double?如何解决十进制和双精度之间的数学错误?
【发布时间】:2017-03-13 00:52:30
【问题描述】:
return Math.Ceiling((_BytesReceived / _TotalBytesToReceive) * 100);

_BytesReceived 是 int,_TotalBytesToReceive 也是 int。

错误是:

严重性代码描述项目文件行抑制状态 错误 CS0121 调用在以下方法或属性之间不明确:“Math.Ceiling(decimal)”和“Math.Ceiling(double)”DownloadMultipleFiles

完整功能:

public int ProgressPercentage
    {
        get
        {
            if (_TotalBytesToReceive > 0)
            {
                return Convert.ToInt32(Math.Ceiling((_BytesReceived / (double)_TotalBytesToReceive) * 100d));
            }
            else
            {
                return -1;
            }
        }
    }

【问题讨论】:

  • 当你在末尾输入100m 而不是仅仅 100 时会发生什么
  • @huseyintugrulbuyukisik 然后我收到此错误:严重性代码描述项目文件行抑制状态错误 CS0266 无法将类型“十进制”隐式转换为“整数”。存在显式转换(您是否缺少演员表?) DownloadMultipleFiles
  • 您需要将两个数字之一转换为加倍,如果不这样做,您将始终得到 0 作为答案(它也解决了您的问题)

标签: c# .net winforms


【解决方案1】:

你可以试试:

return (int)Math.Ceiling((double)(
   (double)_BytesReceived / (double)_TotalBytesToReceive * 100.0d
));

或者如果你喜欢float:

return (int)Math.Ceiling((float)(
   (float)BytesReceived / (float)_TotalBytesToReceive * 100.0f
));

原因是,Math.Ceil 过载,接受floatdouble。您的表达式需要转换为目标类型,编译器只想知道它应该转换为什么类型,因为两者都是可能的。

请注意,在使用float 时,可能仍然需要在开始时进行额外的类型转换(没有尝试过)。

【讨论】:

  • ((double)_BytesReceived) / _TotalBytesToReceive 会是更好的选择。 $20 表示操作的下一个问题是为什么他总是得到 0(他正在做 int 除法)。在除法之前将两个数字之一转换为双精度数或浮点数可以解决这两个问题。
  • 代码还是错误的,你需要去掉( )周围的/操作,让演员先发生。
  • 啊,我明白你的意思了。今天太晚了
  • @Psi 仍然收到错误无法将类型“十进制”隐式转换为“整数”。上次编辑后存在显式转换(您是否缺少演员表?)。
  • 这是一个不同的错误,现在我要明确地转换所有内容。如果这不起作用,我今天将退出编程。
【解决方案2】:

也许您应该将所有变量转换为 int 或您想要的内容:

Convert.Toint32(value); Convert.ToDouble(value);

等等

【讨论】:

  • 这似乎解决了错误: return Convert.ToInt32(Math.Ceiling((_BytesReceived / (double)_TotalBytesToReceive) * 100d));但是我应该转换成int32还是64?
  • convert ToInt32() ... p.s 如果您觉得这有帮助,请标记为解决方案或点赞
  • @Muj 他说:严重性代码描述项目文件行抑制状态错误 CS0121 以下方法或属性之间的调用不明确:'Math.Ceiling(decimal)' 和 'Math.Ceiling(double) ' DownloadMultipleFiles ,所以将所有转换为int
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多