C# - Math.Sqrt() 返回小数

Posted

技术标签:

【中文标题】C# - Math.Sqrt() 返回小数【英文标题】:C# - Math.Sqrt() returning decimals 【发布时间】: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。 这个问题在这里有几个答案:***.com/questions/4124189/… 您显然将Math.Sqrt() 的结果转换为Int32 - 一个整数,即没有小数。 因为您的问题值得他们提出。你有 Int32 c = Convert.ToInt32(Math.Sqrt(c2));并询问我的小数点发生了什么需要反对票。 【参考方案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);

【讨论】:

以上是关于C# - Math.Sqrt() 返回小数的主要内容,如果未能解决你的问题,请参考以下文章

20170430 math.sqrt函数

C#调用带参数的python脚本

Math

LeetCode69. x 的平方根

LeetCode69. x 的平方根

python内置函数