标题: [数值计算] 批处理如何判断数值范围? [打印本页]
作者: cjiabing 时间: 2009-12-23 01:31 标题: 批处理如何判断数值范围?
设计一个办公程序,得到一个分数,然后据分数判断等级。比如结果分数是47,属于一等,批处理如何实现?
一等41-50,二等30-40,三等0-29
我的困惑,搞了两个晚上,计算机竟然判断370比50小〈lep〉!而且数值小于十的经常出错,甚至if "垃圾" lss "52" echo 吖洞田,它也显示!具体代码改天发。
作者: bamboo 时间: 2009-12-23 10:45
数值的比较不要加引号,就能正确比较了。加上引号会把数值当成字符串比较。
你可以试试下面的代码:- @echo off
- :loop
- cls
- set /p num=请输入分数(0-50):
- if %num% leq 50 if %num% gtr 40 echo 分数%num%为一等,按任意键重输!&pause>nul&goto :loop
- if %num% leq 40 if %num% geq 30 echo 分数%num%为二等,按任意键重输!&pause>nul&goto :loop
- if %num% lss 30 if %num% geq 0 echo 分数%num%为三等,按任意键重输!&pause>nul&goto :loop
- echo 输入数值不对!请按任意键重输!&pause>nul&goto :loop
复制代码
作者: wsjxwj 时间: 2009-12-23 11:10
: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
作者: 随风 时间: 2009-12-23 12:48
- @echo off
- :loop
- set /p n=请输入分数(0-50): &cls
- if %n% gtr 29 (
- if %n% gtr 40 (echo %n% 一等) else (echo %n% 二等)
- ) else echo %n% 三等
- echo;&goto loop
复制代码
作者: cjiabing 时间: 2009-12-23 12:58
你们的好简单,层次分明!我的乱。
我的为什么不得,帮忙检查下:
for /f %%i in (tempt.txt) do set mum4=%%i
if "!mum4!" lss "63" echo 大大大大
其中的 tempt.txt只有数字‘’370‘’。按说370比63大,但结果显示了“大大大大”为什么?
作者: neorobin 时间: 2009-12-23 13:46
如果你的代码中没有用
- setlocal enabledelayedexpansion
复制代码
启用延迟的环境变量扩展,
也没有用 命令行参数 /vn (启用延迟的环境变量扩展) 来运行你的批处理
那么"!mum4!" 是不会被扩展成 "370" 的, 而是保持原状 "!mum4!"
在 ASCII 代码标准中, 半角感叹号 ! (码值33) 是小于所有的数字字符(码值48-57)的
即使你改成
if "!mum4!" lss "0" echo 大大大大
也还是会显示 大大大大 的
作者: keen 时间: 2009-12-23 14:43 标题: 回复 6楼 的帖子
即使它启用了延迟的环境变量扩展,把"!num4!"扩展为"370"
if "!mum4!" lss "63" echo 大大大大,还是会显示 大大大大 的。
原因是:
数字比较的时候,不要加"" 双引号,加上双引号的数字比较的方式是:先比较第一个字符,如果相同,再比较第二个字符,依此类推。当"370"和"63"比较时,"370"中的第一个3,小于"63"中的第一个6,所以显示 大大大大 。
作者: neorobin 时间: 2009-12-23 15:02 标题: 回复 7楼 的帖子
对, keen 指出了我 6 楼中未明确说出的错误意思, 所以数值比较请不要加双引号括起来
示例:- if "50" leq "6" (echo lll) else echo ggg
复制代码
输出
lll
而- set t=50
- if %t% leq 6 (echo lll) else echo ggg
复制代码
输出
ggg
作者: cjiabing 时间: 2009-12-25 14:39 标题: 标题
谢谢7楼,问题似乎和你说的一样,其它网站也有人提到该问题,但语焉不详,只是说要在比较前检查比较数据真实性。这个真实性估计就是你说的双引号,先前我没加,存在其它问题我就加进去了。等晚上有空了我再测试。
作者: lxzzr 时间: 2009-12-25 15:05
IF 在比较纯数字和字符串的时候好象专门讲过滴....
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |