【问题标题】:How to convert decimal types?如何转换十进制类型?
【发布时间】:2021-03-10 04:03:33
【问题描述】:

所以我对小数类型有疑问。 我的任务: 描述 在 3D 空间中有一个点和一条线。找出它们之间的距离。 输入:

九个实数,以下的 3D 坐标:

  1.  The given point.
    
  2.  The point on the line.
    
  3.  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)。这是一个不合理的值(有无限个小数位)。你想看几个?

标签: c# .net types


【解决方案1】:
Console.WriteLine(d.ToString("0.0#######"));

格式字符串"0.0#######" 删除所有尾随的zeroez,但保证小数点后至少有一位。

可能的输入和输出:

Math.Sqrt(2);
1.41421356

Math.Sqrt(0.02); 
0.14142136

Math.Sqrt(1);
1.0

Math.Sqrt(0.0001);
0.01

【讨论】:

    【解决方案2】:

    因为只有当值是整数时才需要小数点,如果是小数则保留数字,如下所示 -

    if (d % 1 == 0)
    {
         Console.WriteLine(String.Format("{0:0.0}", d));
    }
    else
    {
         Console.WriteLine(d);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-07
      • 2011-06-19
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2021-09-27
      • 2019-06-10
      • 2015-09-13
      • 2013-10-08
      相关资源
      最近更新 更多