【发布时间】:2021-03-10 04:03:33
【问题描述】:
所以我对小数类型有疑问。 我的任务: 描述 在 3D 空间中有一个点和一条线。找出它们之间的距离。 输入:
九个实数,以下的 3D 坐标:
-
The given point. -
The point on the line. -
The direction vector of the line.
方向向量的长度大于1e-8。 输出: 一个实数,给定点和线之间的距离。 示例:
输入: 1.0 1.0 1.0 2.0 1.0 1.0 0.0 0.0 1.0 输出: 1.0 我的代码:
static void Main(string[] args)
{
var input = Console.ReadLine();
var numbers = input.Split(' ').Select(x => decimal.Parse(x)).ToArray();
var m0 = new[] {numbers[0],numbers[1],numbers[2] };
var m1 = new[] { numbers[3], numbers[4], numbers[5] };
var s= new[] { numbers[6], numbers[7], numbers[8] };
decimal[] m1m0=new decimal[3];
for(int i =0;i<3;i++)
{
m1m0[i] = m1[i] - m0[i];
}
decimal[] m1m0s = new decimal[3];
m1m0s[0] = m1m0[1] * s[2] - m1m0[2] * s[1];
m1m0s[1] = m1m0[2] * s[0] - m1m0[0] * s[2];
m1m0s[2] = m1m0[0] * s[1] - m1m0[1] * s[0];
var d = GetAbs(m1m0s[0], m1m0s[1], m1m0s[2]) / GetAbs(s[0], s[1], s[2]);
Console.WriteLine((decimal)d);
}
static decimal GetAbs(decimal a , decimal b , decimal c )
{
var d = a * a + b * b + c * c;
double e = (double)d;
var temp= Math.Sqrt(e);
decimal sqrt = Convert.ToDecimal(temp);
return sqrt ;
}
我的程序结果: 输入 1.0 1.0 1.0 2.0 1.0 1.0 0.0 0.0 1.0 输出 1
我需要我的结果是浮点数,即使我得到一个整数类型。输出需要是 1.0 或 2.0 ,但不是 1 或 2 。
【问题讨论】:
-
我觉得这不是转换问题,而是显示问题。如果您希望它始终显示 1 个小数,我会尝试
Console.WriteLine(d.ToString("0.0")); -
@jdweng 所以它不工作
-
@Knoop 但它是我的结果,我不需要它
-
那你想要什么?多于一位小数还是刚刚减少到一位小数(这样 1.09 变为 1.0)?
-
如果将第一个输入值更改为 2.0,结果将是 sqrt(2)。这是一个不合理的值(有无限个小数位)。你想看几个?