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

[数值计算] 批处理如何判断数值范围?

设计一个办公程序,得到一个分数,然后据分数判断等级。比如结果分数是47,属于一等,批处理如何实现?
一等41-50,二等30-40,三等0-29
我的困惑,搞了两个晚上,计算机竟然判断370比50小〈lep〉!而且数值小于十的经常出错,甚至if "垃圾" lss "52" echo 吖洞田,它也显示!具体代码改天发。

数值的比较不要加引号,就能正确比较了。加上引号会把数值当成字符串比较。
你可以试试下面的代码:
  1. @echo off
  2. :loop
  3. cls
  4. set /p num=请输入分数(0-50):
  5. if %num% leq 50 if %num% gtr 40 echo 分数%num%为一等,按任意键重输!&pause>nul&goto :loop
  6. if %num% leq 40 if %num% geq 30 echo 分数%num%为二等,按任意键重输!&pause>nul&goto :loop
  7. if %num% lss 30 if %num% geq 0 echo 分数%num%为三等,按任意键重输!&pause>nul&goto :loop
  8. echo 输入数值不对!请按任意键重输!&pause>nul&goto :loop
复制代码

TOP

:lp
@echo off&cls
set /p i=请输入分数:
if %i% lss 51 if %i% gtr 40 echo 一等 &goto :eof
if %i% gtr 29  if %i% lss 41  echo 二等 &goto :eof
  if %i% lss 30 (if %i% gtr 0 echo 三等 &goto :eof) else echo 输入有误,按任意键返回重新输入&pause>nul&&goto lp

TOP

  1. @echo off
  2. :loop
  3. set /p n=请输入分数(0-50): &cls
  4. if %n% gtr 29 (
  5.     if %n% gtr 40 (echo %n% 一等) else (echo %n% 二等)
  6.   ) else echo %n% 三等
  7. echo;&goto loop
复制代码
技术问题请到论坛发帖求助!

TOP

你们的好简单,层次分明!我的乱。
我的为什么不得,帮忙检查下:
for /f %%i in (tempt.txt) do set mum4=%%i
if "!mum4!" lss "63" echo 大大大大
其中的 tempt.txt只有数字‘’370‘’。按说370比63大,但结果显示了“大大大大”为什么?

TOP

如果你的代码中没有用
  1. setlocal enabledelayedexpansion
复制代码

启用延迟的环境变量扩展,
也没有用 命令行参数 /vn (启用延迟的环境变量扩展) 来运行你的批处理
那么"!mum4!" 是不会被扩展成 "370" 的, 而是保持原状 "!mum4!"
在 ASCII 代码标准中, 半角感叹号 ! (码值33) 是小于所有的数字字符(码值48-57)的
即使你改成
if "!mum4!" lss "0" echo 大大大大
也还是会显示 大大大大 的

TOP

回复 6楼 的帖子

即使它启用了延迟的环境变量扩展,把"!num4!"扩展为"370"
if  "!mum4!" lss "63" echo 大大大大,还是会显示 大大大大 的。

原因是:
数字比较的时候,不要加"" 双引号,加上双引号的数字比较的方式是:先比较第一个字符,如果相同,再比较第二个字符,依此类推。当"370"和"63"比较时,"370"中的第一个3,小于"63"中的第一个6,所以显示 大大大大 。
(*^_^*)

TOP

回复 7楼 的帖子

对, keen 指出了我 6 楼中未明确说出的错误意思, 所以数值比较请不要加双引号括起来
示例:
  1. if "50" leq "6" (echo lll) else echo ggg
复制代码
输出
lll
  1. set t=50
  2. if %t% leq 6 (echo lll) else echo ggg
复制代码
输出
ggg

TOP

标题

谢谢7楼,问题似乎和你说的一样,其它网站也有人提到该问题,但语焉不详,只是说要在比较前检查比较数据真实性。这个真实性估计就是你说的双引号,先前我没加,存在其它问题我就加进去了。等晚上有空了我再测试。

TOP

IF 在比较纯数字和字符串的时候好象专门讲过滴....

TOP

返回列表