只获取X长度数字的前10个数字

时间:2010-08-28 17:04:33

标签: c# floating-point

我有一个计算两条xyz线之间距离的方法,并返回一个漂亮的长双数,如10,12345678963235。 但我只需要10,12345,这对我来说应该是。我怎样才能做到这一点? 这是返回值的方法:

public static double Distance(Vector3 v1, Vector3 v2)
{        
    return
    (
        Math.Sqrt
        (
            (v1.X - v2.X) * (v1.X - v2.X) +
            (v1.Y - v2.Y) * (v1.Y - v2.Y) +
            (v1.Z - v2.Z) * (v1.Z - v2.Z)
        )
    );
}

谢谢!

4 个答案:

答案 0 :(得分:4)

Math.Round(val, 5);

答案 1 :(得分:4)

这是非常错误的方法。你永远想要故意在你的程序中抛弃准确性。您的计算机很耐心,可以跟踪一个数字中最多15位有效数字。这与你获得双倍价值一样多。如果您故意使其不太准确并在进一步计算中继续使用结果值,那么您将陷入深深的麻烦。

只有人们关心这个数字是什么样的。通过向人眼显示值并然后摆脱噪声数字来容纳它。像:

Console.WriteLine("{0:N5}", value);

string output = value.ToString("N5");

答案 2 :(得分:3)

重新阅读问题之后,我认为你唯一的选择是转换为字符串,取前10个字符,然后转换回双倍。

如果你的号码是小数(你有一个,而不是.所以我不确定)下面的方法应该有效,否则你需要做一下字符串的事情


Math.Round(
    Math.Sqrt 
    ( 
        (v1.X - v2.X) * (v1.X - v2.X) + 
        (v1.Y - v2.Y) * (v1.Y - v2.Y) + 
        (v1.Z - v2.Z) * (v1.Z - v2.Z) 
    ), 5);

http://msdn.microsoft.com/en-us/library/aa340228.aspx

答案 3 :(得分:0)

对于精确的N个十进制数字,没有浮点编码。如果需要,请使用小数。

如果您只想存储7位精度,那么返回一个浮点数,这很方便。

public static float Distance(Vector3 v1, Vector3 v2)
{        
    return
    (
        (float)Math.Sqrt
        (
            (v1.X - v2.X) * (v1.X - v2.X) +
            (v1.Y - v2.Y) * (v1.Y - v2.Y) +
            (v1.Z - v2.Z) * (v1.Z - v2.Z)
        )
    );
}

如果要显示7位数的精度,则:     result.ToString( “F7”);