Powershell 0.6 和 0.5 秒之间的差异感觉很奇怪

Fly*_*der 1 powershell

这并不是真正的问题。它可能不是由powershell直接引起的,但我今天遇到了这个奇怪的现象。我什至感到无聊,制作了一个循环单击的小脚本,所以没什么大不了的。

奇怪的是:当我在循环中添加一个小的睡眠以避免我的系统由于每秒大量的点击而死机时,我注意到以下之间的频率存在巨大差异:

sleep 0.50001- 清晰可见每秒点击两次。

和

sleep 0.5- 速度快了很多 - 感觉每秒至少点击 10 次。

我已经在浏览器“游戏”cookie clicker 上对此进行了测试,以将其可视化(好吧,并摆脱一些无聊),并且它在那里变得非常明显。

对于这个问题:任何人都可以向我解释为什么明显比powershell0.5快很多吗?0.50001

PS:我也用 测试过0.4-0.6就好像 0.5 是正常速度和亚音速之间的边界。

Mat*_*sen 7

你是中点舍入的受害者!

让我们看一下 的语法Start-Sleep:

PS C:\> Get-Command Start-Sleep -Syntax

Start-Sleep [-Seconds] <int> [<CommonParameters>]

Start-Sleep -Milliseconds <int> [<CommonParameters>]
Run Code Online (Sandbox Code Playgroud)

如您所见,默认参数集将Secondssleep 作为整数。

当您提供 时Double,PowerShell 会尝试将您的输入值转换为整数,并且由于.NET 采用的默认中点舍入模式0.5,并且 lower 会四舍五入为 。0

所以[int]0.50001等于1并且[int]0.5等于0