首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >批处理-如果变量值在一个数字附近

批处理-如果变量值在一个数字附近
EN

Stack Overflow用户
提问于 2017-02-20 10:00:15
回答 4查看 592关注 0票数 0

如何检测接近值的数字?我有以下代码,但我想缩短它。

代码语言:javascript
运行
复制
SET /A "AI_1=%AI%-2"
SET /A "AI_2=%AI%-1"

SET /A "AI_1h=%AI%+1"
SET /A "AI_2h=%AI%+2"

IF %Speed% EQU %AI_2% GOTO :ACCELERATE
IF %Speed% EQU %AI_1% GOTO :ACCELERATE

IF %Speed% EQU %AI% GOTO :ACCELERATE

IF %Speed% EQU %AI_1H% GOTO :ACCELERATE
IF %Speed% EQU %AI_2H% GOTO :ACCELERATE
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-20 10:40:26

也许有点神秘,但这缩短了代码。

代码语言:javascript
运行
复制
2>nul set /a "1/((speed-ai-1)*(speed-ai)*(speed-ai+1))" || goto :ACCELERATE

它只是试图计算一个除法。如果speed值在[AI-1 .. AI+1]范围内,除数中的至少一个元素将是0,那么乘法将是0,除法将失败,除法为零错误。条件运算符|| (如果上一个命令失败,则运行next命令)将处理这种情况。

如果speedai的值很高(批处理算法只处理整数有符号的32位值),则应将操作分为三个不同的除法,以避免乘法中的溢出。

代码语言:javascript
运行
复制
2>nul set /a "1/(speed-ai-1), 1/(speed-ai), 1/(speed-ai+1)" || goto :ACCELERATE
票数 3
EN

Stack Overflow用户

发布于 2017-02-20 10:05:05

代码语言:javascript
运行
复制
EQU : Equal
NEQ : Not equal
LSS : Less than <
LEQ : Less than or Equal <=
GTR : Greater than >
GEQ : Greater than or equal >=

我会结合LEQ和GEQ来推迟,如果你有一个接近你目前的数字。

来源:https://ss64.com/nt/if.html

票数 1
EN

Stack Overflow用户

发布于 2017-02-20 10:37:29

这个for循环通过AI-3循环到AI+3,并对它们之间的每个整数进行if比较。

代码语言:javascript
运行
复制
SET /A "AI_3Lower=%AI%-3"
SET /A "AI_3Higher=%AI%+3"

for /l %%G in (%AI_3Lower,1,%AI_3Higher) do (
    if %Speed% EQU %%G goto :accelerate
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42341475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档