我正在尝试学习C#,我有兴趣尝试编写一个简单的do-while来计算一个简单数字的平方根
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double x = Convert.ToDouble(Console.ReadLine());
double root = 0;
do
{
root += 0.0001;
Console.WriteLine(root);
}
while ((root * root) % x != 0);
Console.WriteLine(Math.Sqrt(x));
Console.WriteLine(root);
}
}
}
如果我使用圆数+ = 0.0001;像root + = 1; 它甚至可以完美地解决问题 但是一旦我开始使用0.1或更小,它就会断裂, 甚至忽略了它在while语句中的检查。
有人可以解释为什么会这样吗? 注意:我不需要解决方案只是出现这种情况的原因。而且我知道我可以使用Math.Sqrt(value);
答案 0 :(得分:1)
致@JonSkeet的回答here(以及提及它的@PaulHicks)
float和double是浮点二进制点类型。换句话说,它们代表了这样的数字:
10001.10010110011
二进制数和二进制点的位置都在值内编码。
decimal是浮点小数点类型。换句话说,它们代表了这样的数字:
12345.65789
这样做可以解决问题:
&self