【问题标题】:C# - Math.Sqrt() returning decimalsC# - Math.Sqrt() 返回小数
【发布时间】:2015-12-09 13:05:17
【问题描述】:

在 C# 中有没有一种方法可以返回带小数的数字的平方根。 每次我使用 Math.Sqrt() 它都不会返回小数。

我的代码:

Int32 a = Convert.ToInt32(input1.Text);
        Int32 b = Convert.ToInt32(input2.Text);

        //a*a + b*b = c*c
        Int32 a2 = a * a;
        Int32 b2 = b * b;
        Int32 c2 = a2 + b2;
        Int32 c = Convert.ToInt32(Math.Sqrt(c2));
        output.Text = Convert.ToString(c);

【问题讨论】:

  • Math.Sqrt 方法返回一个双精度数,因此肯定包含结果的小数部分。你是怎么用的?
  • 十进制不是桌面硬件的能力。您需要将其从浮点数或双精度数转换为十进制数。但是一些特殊的 cpu 架构可能具有定点算法的能力,在这种情况下您需要实现自己的 sqrt。
  • 这个问题在这里有几个答案:stackoverflow.com/questions/4124189/…
  • 您显然将Math.Sqrt() 的结果转换为Int32 - 一个整数,即没有小数。
  • 因为您的问题值得他们提出。你有 Int32 c = Convert.ToInt32(Math.Sqrt(c2));并询问我的小数点发生了什么需要反对票。

标签: c# floating-point type-conversion implicit-conversion math.sqrt


【解决方案1】:

代码中的这一行:

  Int32 c = Convert.ToInt32(Math.Sqrt(c2));

进行两次类型转换。其中之一是隐含的:c2,一个Int32 项目,被转换为Double,因此它可以被Math.Sqrt() 操作。到目前为止一切顺利。

然后您将结果(几乎可以肯定在Double 输出中表示小数部分)转换为Int32。这会清除小数部分。

C# 有一些非常有用的格式化功能。阅读此页面上的示例。 https://msdn.microsoft.com/en-us/library/kfsatb94(v=vs.110).aspx 有可能使用

output.Text = Math.Sqrt(c2).ToString("F4"); 

会给你一个有用的结果。

【讨论】:

  • 那么我该如何克服这个
  • @trickrider2002 你期待什么?如果您想要小数,请不要将其转换为 int
【解决方案2】:

转换为整数 (Int32) 会删除数字的小数部分...

    int number = (Int32) 3.14159;  // value of number will be 3 (not 3.14159)
    // Do this instead
    double c = Math.Sqrt(c2); // will give you the result you want
    output.Text = Convert.ToString(c);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2018-05-31
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多