c# - 为什么我的返回值不对?

标签 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;


    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...

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

关于c# - 为什么我的返回值不对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2068668/

相关文章:

Java:自动装箱和强制转换有什么区别?

c - 将变量转换为 (void *) 有什么影响?

c# - 无法用两个表创建外键

c# - 为什么我不能合并两个 JArray?

c# - 在 Visual Studio 2010 中为常用代码创建默认设置?

c# - 如何正确处置 IHttpModule?

c++ - Gtest,等于对象

c++ - 允许动态分配的对象的C数组

c++ - 原子地 std::vector::push_back() 并返回索引

arrays - Swift 3 - 转换值时总是得到 nil