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() 返回小数的主要内容,如果未能解决你的问题,请参考以下文章