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

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

当大于 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
复制代码
1

评分人数

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

回复 1# hnfeng

批处能处理的正整数区间=0-2147483647。

TOP

回复  hnfeng

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



   谢谢。那么能否推荐一个计算大数值的方法或第三方?主要用来比较两个大数值

TOP

本帖最后由 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

评分人数

TOP

回复  hnfeng

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



    谢谢。
但是windows2003里面用不了powershell
暂且用 BatCalc.exe 把数值减小来解决了

TOP

本帖最后由 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

评分人数

TOP

用其他语言进行拓展
自带的就用vbs或jscript
第三方用lua或nodejs(只需主程序)

TOP

如果单纯比较数值大小,可以把运算符两边的数字预先处理一下,把它当成字符串来比较。比如将数字都预先处理 ...
qixiaobin0715 发表于 2024-9-25 15:25



    这种方法确实不错,简单实用,谢谢

TOP

返回列表