我有一个计算两条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)
)
);
}
谢谢!
答案 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);
答案 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”);