gpt4 book ai didi

C# 检查进度的奇怪问题

转载 作者:行者123 更新时间:2023-12-03 19:00:49 27 4
gpt4 key购买 nike

我在构造函数中有一个循环,它创建并初始化一个参差不齐的对象数组。在循环中,我在每次迭代时将它打印到控制台,这样我就知道它完成了多远的过程。它仅以 5 的倍数打印到控制台(尽管出于某种原因它仅以 10 的倍数打印),因此它不会向屏幕发送垃圾邮件。例如,15% 20% 25%。

当我在 Windows 上的 .Net 2.0 上运行代码时,它每 10%(而不是 5%)打印一次。如果我在 ARM 机器上的 Mono 上运行相同的代码,它根本不会打印出任何进度。

  1. 是什么导致 Mono 不提供任何输出?
  2. 为什么只打印 10% 而不是 5% 的增量?

谢谢

代码如下:

public Map(int NumberOfRows, int NumberOfColumns)
{
Rows = NumberOfRows;
Columns = NumberOfColumns;

TileGrid = new Tile[NumberOfRows][];
for (int x = 0; x < TileGrid.Length; x++)
{
TileGrid[x] = new Tile[NumberOfColumns];
for (int y = 0; y < TileGrid[x].Length; y++)
{
TileGrid[x][y] = new Tile();
}

if (((double)x / Rows) * 100 % 5 == 0)
{
Console.WriteLine("{0}%", ((double)x / Rows) * 100);
}
}
}

最佳答案

问题基本上是您正在对 float 执行相等性检查,这几乎不是一个好主意。

更好...但仍然不好:

int percentage = (x * 100) / Rows;
if (percentage % 5 == 0)
{
Console.WriteLine("{0}%", percentage);
}

这仍然不会打印百分比,除非您最终正好为 5% 的倍数。所以如果有 12 个项目,它就不会工作。试试这个:

// Before the loop
int lastPrintedPercentage = -5; // So that we always print on the first loop

// Within the loop
int percentage = (x * 100) / Rows;
if (percentage >= lastPrintedPercentage + 5)
{
Console.WriteLine("{0}%", percentage);
lastPrintedPercentage = percentage;
}

关于C# 检查进度的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18368199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com