Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;无法隐式转换类型浮点?浮动;_C#_Floating Point - Fatal编程技术网

C# &引用;无法隐式转换类型浮点?浮动;

C# &引用;无法隐式转换类型浮点?浮动;,c#,floating-point,C#,Floating Point,我试图减去浮点格式的2个变量(float xdiff=x1-x2;),但是我得到了错误“不能隐式地将类型float?转换为float”。值d、c、s、m、半径、x1、y1、x2、y2从windows窗体输入中获取 代码如下: public Nullable<float> d = null; public Nullable<float> c = null; public Nullable<float> s = null; p

我试图减去浮点格式的2个变量(
float xdiff=x1-x2;
),但是我得到了错误“不能隐式地将类型float?转换为float”。值
d、c、s、m、半径、x1、y1、x2、y2
从windows窗体输入中获取

代码如下:

    public Nullable<float> d = null;

    public Nullable<float> c = null;

    public Nullable<float> s = null;

    public Nullable<float> m = null;

    public Nullable<float> radius = null;

    public Nullable<float> x1 = null;

    public Nullable<float> y1 = null;

    public Nullable<float> x2 = null;

    public Nullable<float> y2 = null;



private void Run_Click(object sender, EventArgs e)
        {
            d = float.Parse(this.downwind.Text);
            c = float.Parse(this.crosswind.Text);
            s = float.Parse(this.maxcross.Text);
            m = float.Parse(this.offset.Text);
            radius = float.Parse(this.rad.Text);
            x1 = float.Parse(this.x1coord.Text);
            y1 = float.Parse(this.y1coord.Text);
            x2 = float.Parse(this.x2coord.Text);
            y2 = float.Parse(this.y2coord.Text);

            float xdiff = x1 - x2;


        }
公共可空d=null;
公共可空c=null;
公共可为null的s=null;
公共可空m=null;
公共可空半径=空;
公共可空x1=null;
公共可空y1=空;
公共可空x2=null;
公共可空y2=null;
私有无效运行\u单击(对象发送方,事件参数e)
{
d=float.Parse(this.downwind.Text);
c=float.Parse(this.crosswind.Text);
s=float.Parse(this.maxcross.Text);
m=float.Parse(this.offset.Text);
radius=float.Parse(this.rad.Text);
x1=float.Parse(this.x1coord.Text);
y1=float.Parse(this.y1coord.Text);
x2=float.Parse(this.x2coord.Text);
y2=float.Parse(this.y2coord.Text);
浮点xdiff=x1-x2;
}

假设您处理了所有空场景,下面应该解决它

float xdiff = (x1 - x2).Value;

如果
x1
x2
预计为
float?
类型,则操作结果
x1-x2
可以是
null
(如果乙醚值为
null
)。因此,预期结果将存储在
float?

你应该使用

float? xdiff = x1 - x2;
或者最好是:

var xdiff = x1 - x2;  //Using var will automatically decide type of result 

非常感谢。它确实解决了这个问题。你能给我解释一下为什么会这样吗?非常感谢:)浮动和浮动的区别是什么?(或可空)是指后者允许您在float没有空值的情况下保留空值。为了优雅地(在CLR的opionion中)处理这个问题,Nullable是一个包装器,它提供了.HasValue和.Value等属性。请在MSDN上阅读相关内容。请注意,只有当
x1
x2
不为空时,此选项才有效。如果它们不为null,则根本没有理由使用
浮点?
。@DourHighArch您是对的。OP已将
x1
x2
声明为
Nullable
float。因此,在更正声明之前,这将不起作用。
如果(x1.HasValue==true&&x2.HasValue==true&&y1.HasValue==true&&y2.HasValue==true&&m.HasValue==true)
我已经使用它来确保处理空场景@MKR您的解决方案也可以使用。不要使用
float.Parse
,因为将引发异常的是
Text
无法转换为
float
,请改用
float.TryParse
@Sajid谢谢。我将实现您应该使用的
float?xdiff=x1-x2
@MKR,结果为您提供
null
如果
x1:null
x2:1
example@Sajid同意。我的意思是使用
float.TryParse
是最好的方法。但是如果OP想要
null
值,那么他可以使用我提到的方法。在这种情况下,我更喜欢使用
var xdiff=x1-x2
。记住使用
float?
是有效的,但结果应该存储在匹配类型的中。因为说
40.0-null=null