标题: [其他] 【已解决】批处理IF 里面的 LSS LEQ 这些有限制吗?这是为啥? [打印本页]
作者: hnfeng 时间: 2024-9-25 13:15 标题: 【已解决】批处理IF 里面的 LSS LEQ 这些有限制吗?这是为啥?
当大于 11位数时,LSS 明显错误,LEQ 正确,数字再大,之后 LEQ 也错误了- N:\>if 100000000 LSS 200000000 (@echo L) else (@echo x)
- L
-
- N:\>if 100000000 LEQ 200000000 (@echo L) else (@echo x)
- L
-
- N:\>if 1000000000 LSS 2000000000 (@echo L) else (@echo x)
- L
-
- N:\>if 1000000000 LEQ 2000000000 (@echo L) else (@echo x)
- L
-
- N:\>if 10000000000 LSS 20000000000 (@echo L) else (@echo x)
- x
-
- N:\>if 10000000000 LEQ 20000000000 (@echo L) else (@echo x)
- L
-
- N:\>if 100000000000 LSS 200000000000 (@echo L) else (@echo x)
- x
-
- N:\>if 100000000000 LEQ 200000000000 (@echo L) else (@echo x)
- L
-
- N:\>if 1000000000000 LEQ 2000000000000 (@echo L) else (@echo x)
- L
-
- N:\>if 10000000000000 LEQ 20000000000000 (@echo L) else (@echo x)
- L
-
- N:\>if 3000000000000000 LEQ 2000000000000000 (@echo L) else (@echo x)
- L
复制代码
作者: aloha20200628 时间: 2024-9-25 13:31
回复 1# hnfeng
批处能处理的正整数区间=0-2147483647。
作者: hnfeng 时间: 2024-9-25 13:43
回复 hnfeng
批处能处理的正整数区间=0-2147483647。
aloha20200628 发表于 2024-9-25 13:31
谢谢。那么能否推荐一个计算大数值的方法或第三方?主要用来比较两个大数值
作者: aloha20200628 时间: 2024-9-25 14:37
本帖最后由 aloha20200628 于 2024-9-26 11:06 编辑
回复 3# hnfeng
批处中直接调用powershell代码完成大数计算(包括浮点计算)和比对最简单,如下- @echo off
- set "a=123456789012345"
- set "b=987654321098765"
- for /f %%v in (
- 'powershell "if(%a%/%b% -eq %b%/%a%){1}else{-1}" '
- ) do if %%v equ 1 (echo,yes) else (echo,no)
- pause&exit/b
复制代码
其中,返回值=1 表示 true=yes=是, 返回值=-1 表示 false=no=否
-eq 是 powershell 采用的比较运算符,全集详见 https://learn.microsoft.com/zh-c ... view=powershell-7.4
作者: hnfeng 时间: 2024-9-25 15:00
回复 hnfeng
批处中直接调用powershell代码最简单,如下其中,返回值=1 表示 true=yes=是, 返回值=-1 ...
aloha20200628 发表于 2024-9-25 14:37
谢谢。
但是windows2003里面用不了powershell
暂且用 BatCalc.exe 把数值减小来解决了
作者: qixiaobin0715 时间: 2024-9-25 15:25
本帖最后由 qixiaobin0715 于 2024-9-25 15:53 编辑
如果单纯比较数值大小,可以把运算符两边的数字预先处理一下,把它当成字符串来比较。比如将数字都预先处理为20个字符,不足20个前面用零补齐,然后再比较,前后数字位数相同不用处理。
1234567890处理为00000000001234567890- if "00000000001234567890" LEQ "20000000000000000000" (@echo L) else (@echo x)
- if "3000000000000000" LEQ "2000000000000000" (@echo L) else (@echo x)
复制代码
作者: Five66 时间: 2024-9-25 21:18
用其他语言进行拓展
自带的就用vbs或jscript
第三方用lua或nodejs(只需主程序)
作者: hnfeng 时间: 2024-9-26 08:00
如果单纯比较数值大小,可以把运算符两边的数字预先处理一下,把它当成字符串来比较。比如将数字都预先处理 ...
qixiaobin0715 发表于 2024-9-25 15:25
这种方法确实不错,简单实用,谢谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |