1

考虑以下代码:

@echo off

setlocal enabledelayedexpansion

set HOUR=00
set MINS=10

if %HOUR% EQU 00 (
set HOUR=12
set /A minDiff=60-!MINS!&set expectedTime=1^.!minDiff!
)

echo expectedTime=!expectedTime!

作为变量 expectedTime 的值的预期输出必须为 1.50 ,但它仅输出 1.。给出的错误是:无效的数字。数字常量是十进制 (17)、十六进制 (0x11) 或八进制 (021)。请帮忙!!谢谢

4

2 回答 2

3

您发布的代码对我来说很好。我怀疑您在与您发布的内容略有不同的条件下遇到错误。

SET /A 有一个非常不幸的特性,即任何以 0 开头的数字都被视为八进制表示法。因此 08 或 09 的值不是 SET /A 的有效数字,并且会给出您引用的错误消息。要获得正确的值,您必须将 MINS 表示为 8 或 9(无前导 0)。请注意,00 到 07 可以正常工作,因为八进制和十进制解释产生相同的值。

一种经常用于处理潜在的不想要的前导零的技巧是在数字字符串前面加上适当大的 10 次幂,然后使用 mod(余数)运算符提取所需的值。例如,如果您从未期望值大于 9999,那么您可以使用以下内容安全地处理变量 VAL 中潜在的前导零

set /a "VAL=10000%VAL% %% 10000"

上述技术的好处是它可以合并到更大的数学计算中,而不必在计算之前单独去除前导零。

于 2012-04-09T19:18:07.657 回答
-1

根据 IF 语句更改为:

 %HOUR% = 12

那应该可以解决这个问题。

于 2012-04-09T18:37:18.207 回答