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

[数值计算] 求助批处理数字运算结果错误

[复制链接]
发表于 2025-1-10 10:52:21 | 显示全部楼层 |阅读模式
  1. @echo off
  2. set /p num=输入数字
  3. if %num% lss 6 echo 数字小于6
  4. if %num% geq 6 (
  5. if %num% lss 9 echo 数字大于或等于6,小于9
  6. )
  7. if %num% geq 10 echo 数字大于等于10
  8. pause
复制代码
输入数字5.5以后,竟然会同时显示第1条和第3条,系统判断5.5大于10?要怎么写才能正确判断大小。
发表于 2025-1-10 11:28:56 | 显示全部楼层
批处理 不支持 小数,只支持整数
 楼主| 发表于 2025-1-10 15:06:13 | 显示全部楼层
回复 2# flashercs
但是,我把数字if %num% geq 10改成9,输入5.5以后,结果显示正确。不支持小数点的逻辑有点讲不通。
  1. @echo off
  2. set /p num=输入数字
  3. if %num% lss 6 echo 数字小于6
  4. if %num% geq 6 (
  5. if %num% lss 9 echo 数字大于或等于6,小于9
  6. )
  7. if %num% geq 9 echo 数字大于等于9
  8. pause
复制代码
发表于 2025-1-10 16:51:17 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-1-11 08:25 编辑

回复 3# 剑气如霜

   批处在比较两个‘整数型’以外的变量或字面量时,均作为字符串处理,即从左到右逐个字符值比对论大小,因此,5.5 小于 9, 而 5.5 大于 10
   所谓批处没有原生小数(浮点数)的概念,是指当采用 set /a 算式遭遇 5.5 这类参数时系统会报错并拒绝运算...
发表于 2025-1-10 23:05:55 | 显示全部楼层
如果if比较的两个字符串均是整数,那么就会比较数字大小;
否则就会通过lstrcmp的方法比较字符串,浮点数就是这样比较的,
根据语言环境逐字符比较,但会特殊处理撇号和连字符。
http://www.bathome.net/viewthread.php?tid=6853
http://www.bathome.net/viewthread.php?tid=18542
http://www.bathome.net/viewthread.php?tid=14681

比较数字大小时是用第一个数减去第二个数,差与0比较。
注意如果两个整数或其差超过32位(-2^31至2^31-1),会产生溢出(截断),比较结果可能有误。
http://www.bathome.net/viewthread.php?tid=7659
发表于 2025-1-10 23:10:31 | 显示全部楼层
建议修改标题为: if 比较浮点数大小有误
 楼主| 发表于 2025-1-12 13:40:46 | 显示全部楼层
你们平时写批处理用什么写的,那种带格式的缩进风格是手动敲空格,还是有什么软件自动生成的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 13:56 , Processed in 0.018848 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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