C# 在for循环中增加一个双精度值时,如何确保它保持相对的圆?

C# 在for循环中增加一个双精度值时,如何确保它保持相对的圆?,c#,for-loop,double,C#,For Loop,Double,我有一个循环: for (double x = -1 * (display.Width / zoom); x <= (display.Width / zoom); x += 0.1) { //.. } for(double x=-1*(display.Width/zoom);x如果需要这种精度,不要使用double或float,而是使用decimal 发生这种情况是因为某些分数不能准确地用二进制表示-我建议阅读。如果需要这种精度,不要使用double或float,而是使用deci

我有一个循环:

for (double x = -1 * (display.Width / zoom); x <= (display.Width / zoom); x += 0.1)
{
    //..
}

for(double x=-1*(display.Width/zoom);x如果需要这种精度,不要使用
double
float
,而是使用
decimal


发生这种情况是因为某些分数不能准确地用二进制表示-我建议阅读。

如果需要这种精度,不要使用
double
float
,而是使用
decimal


发生这种情况是因为某些分数不能准确地用二进制表示-我建议阅读。

这与存储双精度
的方式有关。请改用十进制。

这与存储双精度的方式有关。改用十进制。

使用整数循环计数r、 初始化为-200并与200进行比较,然后在每次迭代中计算实际的
x


UPD:使用十进制可能更好。

使用整数循环计数器,初始化为-200并与200进行比较,然后在每次迭代中计算实际的
x

UPD:使用十进制可能更好。

浮点数字(双精度/浮点)不精确,而是使用-200和200作为整数。这样就不必担心缺乏浮点精度

有关此不精确性的更多信息,我建议使用此文档。

浮点数字(双精度/浮点)不精确,而是使用-200和200作为整数。这样就不必担心浮点精度不足

有关此不精确性的更多信息,我建议使用此文档。

如果您确实希望它尽可能精确,请放大它,以便您可以使用
int
long
…例如:

long _Z = (long) ((display.Width * 10) / zoom);

for (long _x = -1 * _Z; _x <= _Z; _x += 1)
{
    double x = ((double)_x) / 10.0;
    // ...

}
long Z=(长)((display.Width*10)/缩放);

对于(long x=-1*Z;x,如果您确实希望它尽可能精确,请放大它,以便您可以使用
int
long
…例如:

long _Z = (long) ((display.Width * 10) / zoom);

for (long _x = -1 * _Z; _x <= _Z; _x += 1)
{
    double x = ((double)_x) / 10.0;
    // ...

}
long Z=(长)((display.Width*10)/缩放);

对于(long x=-1*Z;x,如果我理解正确的话……为什么你要绕开它

Math.Round(x,1)

如果我没弄错的话…你为什么要绕过去

Math.Round(x,1)

如果您必须使用double,您可以这样使用:

double x = 0.0;
while (x <= 3.0)
{
   //Do your stuff
   x = Math.Round(x + 0.1, 1);
}
double x=0.0;

而(x如果您必须使用double,您可以这样使用:

double x = 0.0;
while (x <= 3.0)
{
   //Do your stuff
   x = Math.Round(x + 0.1, 1);
}
double x=0.0;

虽然(x@Oded我是在你的答案弹出之前写的,所以我决定继续打字,但在这一点上,这个答案有点毫无意义……为指控道歉。@Oded一点也不麻烦。@Oded我是在你的答案弹出之前写的,所以我决定继续打字,但在这一点上,这个答案有点不太正确无稽之谈……为提出指控道歉。@Ode一点也不麻烦。大卫·戈德伯格的文章很棒!@SonerGönül一些匿名作家的添加更有用,因为它解释了为什么现实中的一切并不像人们读戈德伯格的论文时想象的那么美好。大卫·戈德伯格的文章很棒!@SonerGönül添加内容由一些匿名作者撰写的文章更有用,因为它解释了为什么现实中的一切并不像人们在阅读戈德堡的论文时想象的那么美好。这是一种可能性,可以像这样放入
for
循环中:
for(double x=start;x这是一种可能性,可以像这样放入
for
循环:
for(double x=开始;x使用十进制,正如人们所建议的那样,对于您的特定情况是好的,但通常不能解决问题。当分数分母的因子不是2时,double会出现不准确的情况。小数也有同样的问题,它们只处理2或5的因子。如果您尝试使用三分之一大小的步长与十分之一不同的是,你会遇到与十进制完全相同的问题。一般来说,最好完全用整数来解决这类问题。正如人们所建议的,使用十进制对你的特殊情况有好处,但不能解决一般问题。当分数的分母有一个除两个。小数也有同样的问题,它们只处理2或5的因子。如果你尝试用三分之一而不是十分之一的步长,那么十进制也会有同样的问题。通常,最好完全用整数来解决这类问题。