使用Math.Ceiling时缺少转换

时间:2019-09-15 12:09:35

标签: c# casting

我刚刚开始在大学使用C#和Visual Studio,并且正在努力使用Math.Ceiling来使浮点值在输出前舍入到下一个整数。

Visual Studio说我缺少演员,但我真的不知道在哪里。这可能真的很简单,但是作为一个新手,我真的不知道从哪里开始。 显示的最后一行是我遇到问题的地方。

我可以和一个告诉我我要去哪里的人一起做

我尝试在float.Parse周围使用Math.Ceiling,但这显然不起作用

const float FencePanelWidth = 1.5f;
float GWidth;
float GLength;
float GPerimetre;
float FencePanelsNeed;
float FencePanelsNeed2;

Console.Write("");
Console.Write("");
GWidth = float.Parse(Console.ReadLine());
Console.Write("");
GLength = float.Parse(Console.ReadLine());
GPerimetre = (GLength * 2) + GWidth;
FencePanelsNeed = GPerimetre / FencePanelWidth;

FencePanelsNeed2 = Math.Ceiling(FencePanelsNeed);

如果FencePanelsNeed是7.24,我希望FencePanelsNeed2是8。

2 个答案:

答案 0 :(得分:0)

Math.Ceiling方法只有两个重载:

  1. public static decimal Ceiling (decimal d);-Docs

  2. public static double Ceiling (double a);-Docs

在您的情况下,它使用第二个重载(因为传递的float值被强制转换为double,因此返回double

您应该做的是将返回值强制转换为intfloat

FencePanelsNeed2 = (int)Math.Ceiling(FencePanelsNeed); // Or:
//FencePanelsNeed2 = (float)Math.Ceiling(FencePanelsNeed);

如果将其强制转换为int,还可以将FencePanelsNeed2声明为int而不是float。

请注意,如果将FencePanelsNeed2声明为double,则首先不会出现该错误,因为不需要强制转换。因此,仅取决于您要使用的类型。

答案 1 :(得分:0)

只需将其强制转换为int并加1,就可以正常工作

using System;
public class Program
{
    const float FencePanelWidth = 7.24f;
    public static void Main()
    {
        var FencePanelsNeed2 = (int)FencePanelWidth < FencePanelWidth ? (int)FencePanelWidth + 1 : (int)FencePanelWidth;
        Console.WriteLine(FencePanelsNeed2);
    }
}

for yourself试试。