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

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

  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?要怎么写才能正确判断大小。

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

TOP

建议修改标题为: if 比较浮点数大小有误

TOP

如果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

TOP

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

回复 3# 剑气如霜

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

TOP

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

TOP

批处理 不支持 小数,只支持整数
微信:flashercs
QQ:49908356

TOP

返回列表