C# 如何转换十进制类型?

C# 如何转换十进制类型?,c#,.net,types,C#,.net,Types,所以我有一个十进制类型的问题。 我的任务: 描述 三维空间中有一个点和一条线。找出他们之间的距离。 输入: 九个实坐标,即: 方向向量的长度大于1e-8。 输出: 实数,给定点与直线之间的距离。 例如: 输入: 1.0 1.0 1.0 2.0 1.0 1.0 0.0 0.0 1.0 输出: 1 我的代码: static void Main(字符串[]args) { var input=Console.ReadLine(); var numbers=input.Split(“”)。选择

所以我有一个十进制类型的问题。 我的任务: 描述 三维空间中有一个点和一条线。找出他们之间的距离。 输入:

九个实坐标,即:

  • 方向向量的长度大于1e-8。 输出: 实数,给定点与直线之间的距离。 例如:

    输入: 1.0 1.0 1.0 2.0 1.0 1.0 0.0 0.0 1.0 输出: 1 我的代码:

    static void Main(字符串[]args)
    {
    var input=Console.ReadLine();
    var numbers=input.Split(“”)。选择(x=>decimal.Parse(x)).ToArray();
    var m0=新[]{numbers[0],numbers[1],numbers[2]};
    var m1=新[]{数[3],数[4],数[5]};
    var s=新[]{numbers[6],numbers[7],numbers[8]};
    小数点[]m1m0=新的小数点[3];
    
    对于(int i=0;i,因为只有当值是整数时才需要小数点,如果值是小数,则保留数字,请按如下操作-

    if (d % 1 == 0)
    {
         Console.WriteLine(String.Format("{0:0.0}", d));
    }
    else
    {
         Console.WriteLine(d);
    }
    
    格式字符串
    “0.0########”
    剪切所有尾随零,但保证小数点后至少有一位数字

    可能的输入和输出:

    Math.Sqrt(2);
    1.41421356
    
    Math.Sqrt(0.02); 
    0.14142136
    
    Math.Sqrt(1);
    1.0
    
    Math.Sqrt(0.0001);
    0.01
    

    我认为这不是转换问题,而是显示问题。如果希望它始终显示1,我会尝试
    Console.WriteLine(d.ToString(“0.0”);
    decimal@jdweng所以它不是working@Knoop但是它是我的四舍五入结果,我不需要它当你想要什么的时候?超过一个小数位,或者只是值被削减到一个小数位(因此1.09变为1.0)?如果将第一个输入值更改为2.0,结果将是sqrt(2)。这是一个无理值(小数位数无限)。您希望看到多少?
     The direction vector of the line.
    
     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 ;
    }
    
    if (d % 1 == 0)
    {
         Console.WriteLine(String.Format("{0:0.0}", d));
    }
    else
    {
         Console.WriteLine(d);
    }
    
    Console.WriteLine(d.ToString("0.0#######"));
    
    Math.Sqrt(2);
    1.41421356
    
    Math.Sqrt(0.02); 
    0.14142136
    
    Math.Sqrt(1);
    1.0
    
    Math.Sqrt(0.0001);
    0.01