C# 为什么我的返回值是错误的?

C# 为什么我的返回值是错误的?,c#,vector,casting,floating-point,double,C#,Vector,Casting,Floating Point,Double,我在C中有一个向量类,下面是一个片段。我的问题是,当我调用GetMagnitude时,它总是返回0.0f-即使在调试器运行的情况下,我检查Sq是否有一个有效值,只要它被传递回其他函数,例如:Normalize,它就返回0.0f。有人能解释一下,帮我修一下吗?我的猜测是它与double->float转换有关,但我就是搞不懂 public class float3 { public float x; public float y; public float z;

我在C中有一个向量类,下面是一个片段。我的问题是,当我调用GetMagnitude时,它总是返回0.0f-即使在调试器运行的情况下,我检查Sq是否有一个有效值,只要它被传递回其他函数,例如:Normalize,它就返回0.0f。有人能解释一下,帮我修一下吗?我的猜测是它与double->float转换有关,但我就是搞不懂

public class float3
{
    public float x;
    public float y;
    public float z;


    public float GetMagnitude()
    {
        float SumSquares = (float)( Math.Pow(x, 2) + Math.Pow(y, 2) + Math.Pow(z, 2));
        float Sq = (float)Math.Sqrt(SumSquares);
        return Sq;
    }

    public void Normalize()
    {
        float inverse = 1.0f / GetMagnitude();

        x *= inverse;
        y *= inverse;
        z *= inverse;
    }
}

我刚刚用这个设置测试了您的代码,它工作得非常好:

void Main()
{
    var myData = new float3
    {
        x = 1,
        y = 1,
        z = 1
    };
    float result = myData.GetMagnitude();
}
我得到的结果是1.73


问题是否可能在别处?你能创建一个小的控制台应用程序并插入代码来隔离它吗?

太尴尬了。看来你是对的,而我的测试不是。吸取的教训。在声明代码错误之前,请去掉所有其他内容。我的道歉和感谢。你曾经初始化过x,y和z吗?在您的示例中,它显然会返回0.0。您可能需要考虑编写X+YY+Z*Z,而不是使用Max.PoW…它既短又快。。。