为什么我的返回值错了?

时间:2010-01-15 00:42:41

标签: c# vector casting floating-point double

我在C#中有一个矢量类(下面是一个片段)。我的问题是,当我调用GetMagnitude()时,它总是返回0.0f - 即使调试器正在运行,我检查Sq有一个有效值,一旦它被传递回其他函数(例如:Normalize()),它返回0.0f。有人可以解释这个并帮我修复它吗?我的猜测是它与double-gt; 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;
    }
}

1 个答案:

答案 0 :(得分:5)

我刚用这个设置测试了你的代码,它运行得很好:

void Main()
{
    var myData = new float3
    {
        x = 1,
        y = 1,
        z = 1
    };
    float result = myData.GetMagnitude();
}

我得到结果1.73 ......

问题可能在其他地方吗?您是否可以创建一个小型控制台应用程序并插入该代码以隔离它?