找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 13848|回复: 7

[其他] 【已解决】批处理IF 里面的 LSS LEQ 这些有限制吗?这是为啥?

[复制链接]
发表于 2024-9-25 13:15:22 | 显示全部楼层 |阅读模式
当大于 11位数时,LSS 明显错误,LEQ 正确,数字再大,之后 LEQ 也错误了
  1. N:\>if 100000000 LSS 200000000 (@echo L) else (@echo x)
  2. L

  3. N:\>if 100000000 LEQ 200000000 (@echo L) else (@echo x)
  4. L

  5. N:\>if 1000000000 LSS 2000000000 (@echo L) else (@echo x)
  6. L

  7. N:\>if 1000000000 LEQ 2000000000 (@echo L) else (@echo x)
  8. L

  9. N:\>if 10000000000 LSS 20000000000 (@echo L) else (@echo x)
  10. x

  11. N:\>if 10000000000 LEQ 20000000000 (@echo L) else (@echo x)
  12. L

  13. N:\>if 100000000000 LSS 200000000000 (@echo L) else (@echo x)
  14. x

  15. N:\>if 100000000000 LEQ 200000000000 (@echo L) else (@echo x)
  16. L

  17. N:\>if 1000000000000 LEQ 2000000000000 (@echo L) else (@echo x)
  18. L

  19. N:\>if 10000000000000 LEQ 20000000000000 (@echo L) else (@echo x)
  20. L

  21. N:\>if 3000000000000000 LEQ 2000000000000000 (@echo L) else (@echo x)
  22. L
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-9-25 13:31:42 | 显示全部楼层
回复 1# hnfeng

批处能处理的正整数区间=0-2147483647。
 楼主| 发表于 2024-9-25 13:43:19 | 显示全部楼层
回复  hnfeng

批处能处理的正整数区间=0-2147483647。
aloha20200628 发表于 2024-9-25 13:31



   谢谢。那么能否推荐一个计算大数值的方法或第三方?主要用来比较两个大数值
发表于 2024-9-25 14:37:19 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-9-26 11:06 编辑

回复 3# hnfeng

批处中直接调用powershell代码完成大数计算(包括浮点计算)和比对最简单,如下

  1. @echo off
  2. set "a=123456789012345"
  3. set "b=987654321098765"
  4. for /f %%v in (
  5.    'powershell "if(%a%/%b% -eq %b%/%a%){1}else{-1}" '
  6. ) do if %%v equ 1 (echo,yes) else (echo,no)
  7. pause&exit/b
复制代码
其中,返回值=1 表示 true=yes=是, 返回值=-1 表示 false=no=否
-eq 是 powershell 采用的比较运算符,全集详见 https://learn.microsoft.com/zh-c ... view=powershell-7.4

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-9-25 15:00:26 | 显示全部楼层
回复  hnfeng

批处中直接调用powershell代码最简单,如下其中,返回值=1 表示 true=yes=是, 返回值=-1  ...
aloha20200628 发表于 2024-9-25 14:37



    谢谢。
但是windows2003里面用不了powershell
暂且用 BatCalc.exe 把数值减小来解决了
发表于 2024-9-25 15:25:47 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-9-25 15:53 编辑

如果单纯比较数值大小,可以把运算符两边的数字预先处理一下,把它当成字符串来比较。比如将数字都预先处理为20个字符,不足20个前面用零补齐,然后再比较,前后数字位数相同不用处理。
1234567890处理为00000000001234567890
  1. if "00000000001234567890" LEQ "20000000000000000000" (@echo L) else (@echo x)
  2. if "3000000000000000" LEQ "2000000000000000" (@echo L) else (@echo x)
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2024-9-25 21:18:51 | 显示全部楼层
用其他语言进行拓展
自带的就用vbs或jscript
第三方用lua或nodejs(只需主程序)
 楼主| 发表于 2024-9-26 08:00:53 | 显示全部楼层
如果单纯比较数值大小,可以把运算符两边的数字预先处理一下,把它当成字符串来比较。比如将数字都预先处理 ...
qixiaobin0715 发表于 2024-9-25 15:25



    这种方法确实不错,简单实用,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 23:57 , Processed in 0.018548 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表