[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理set命令怎样计算以零开头的数字?

答案在8楼
  1. @echo off
  2. set N=0123
  3. set /a N=%N%*1
  4. echo %N%
复制代码
结果是83
为什么会这样?

我想将一个四位数变成四个数字,代码如下。只要首数字不为0,结果都正确。但是如果输入0123(允许这样输),结果却是0 0 8 3
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p Num=请连续输入四个不同的数字(比如0123):
  3. set /a N1=!Num!/1000
  4. set /a Num=!Num!-!N1!*1000
  5. set /a N2=!Num!/100
  6. set /a Num=!Num!-!N2!*100
  7. set /a N3=!Num!/10
  8. set /a N4=!Num!-!N3!*10
  9. echo !N1! !N2! !N3! !N4!
复制代码
好吧,既然set中,0开头的表示8进制,我绕着走好了。
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p Num=请连续输入四个不同的数字(比如0123):
  3. set /a N1=!Num!/1000
  4. if !N1!==0 goto R8
  5. set /a Num=!Num!-!N1!*1000
  6. set /a N2=!Num!/100
  7. set /a Num=!Num!-!N2!*100
  8. set /a N3=!Num!/10
  9. set /a N4=!Num!-!N3!*10
  10. goto N4
  11. :R8
  12. echo A!Num!>ls.tmp
  13. for /f "tokens=2 delims=0" %%a in (ls.tmp) do set Num=%%a
  14. del /a /f ls.tmp
  15. set /a N2=!Num!/100
  16. set /a Num=!Num!-!N2!*100
  17. set /a N3=!Num!/10
  18. set /a N4=!Num!-!N3!*10
  19. :N4
  20. echo !N1! !N2! !N3! !N4!
复制代码
新问题发现了。如果有8 和9 还是会报错。

下面这段代码错在哪里了?假设M1到M4 N1到N4全都有值了。目的是找出相同数字的个数。
  1. @echo off&setlocal enabledelayedexpansion
  2. set b=0
  3. for  %%a in (!M1!,!M2!,!M3!,!M4!) do (
  4. for  %%a in (!N1!,!N2!,!N3!,!N4!) do (if %%a==%%b
  5. set /a b+=1  )
  6. )
复制代码
我对上述代码的理解是:将M1的值值赋给%%a,执行第二个for,分别将N1-N4的值赋给%%b,每赋一次值就和%%a比较一次。
这种理解错在哪里了?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

4# neorobin


有什么办法能够实现我的想法呢?N1 N2 N3 N4分别与M1 M2 M3 M4比较,找出相同数字的个数。

TOP

返回列表