Board logo

标题: [数值计算] 求助批处理数字运算结果错误 [打印本页]

作者: 剑气如霜    时间: 2025-1-10 10:52     标题: 求助批处理数字运算结果错误

  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?要怎么写才能正确判断大小。
作者: flashercs    时间: 2025-1-10 11:28

批处理 不支持 小数,只支持整数
作者: 剑气如霜    时间: 2025-1-10 15:06

回复 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
复制代码

作者: aloha20200628    时间: 2025-1-10 16:51

本帖最后由 aloha20200628 于 2025-1-11 08:25 编辑

回复 3# 剑气如霜

   批处在比较两个‘整数型’以外的变量或字面量时,均作为字符串处理,即从左到右逐个字符值比对论大小,因此,5.5 小于 9, 而 5.5 大于 10
   所谓批处没有原生小数(浮点数)的概念,是指当采用 set /a 算式遭遇 5.5 这类参数时系统会报错并拒绝运算...

作者: buyiyang    时间: 2025-1-10 23:05

如果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
作者: buyiyang    时间: 2025-1-10 23:10

建议修改标题为: if 比较浮点数大小有误
作者: 剑气如霜    时间: 2025-1-12 13:40

你们平时写批处理用什么写的,那种带格式的缩进风格是手动敲空格,还是有什么软件自动生成的?




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2