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

[数值计算] 如何解决比较两个大的数字出现误判/判断错误/有误的问题?

[复制链接]
发表于 2016-1-18 10:06:00 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-4-10 13:52 编辑

各位大神,我在脚本中需要比较两个变量值的大小,但是发现使用 gtr 和 lss去比较是存在问题的,比如变量A=134991245312 变量B=2147483648,那么比较的结果是变量A小于变量B。 看起来是按照从左到右的顺序去比较了,是否需要先将变量的值转换成数字类型?不知道能否进行这样的转换,请各位赐教,非常感谢!
  1. cd C:\
  2. C:
  3. set size=2147483648
  4.         for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DeviceID='C:'" get FreeSpace /value') do (
  5.                         echo %%a
  6.                         echo %size%
  7.                                                 if %%a gtr %size% (
  8.                         echo %date%----磁盘空间剩余大于2GB
  9.                                                 )else if %%a lss %size% (
  10.                         echo %date%----磁盘空间剩余小于2GB
  11.                                     ) else (
  12.                         echo %date%----磁盘空间剩余等于2GB
  13.                                     )
  14.                     )
  15. echo %date%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^磁盘空间检查完成
  16. pause
复制代码

评分

参与人数 1PB -2 收起 理由
pcl_test -2 勿发笼统的标题

查看全部评分

发表于 2016-1-18 14:00:52 | 显示全部楼层
134991245312 这个数字太大,超过了BAT能够直接计算的范围。
 楼主| 发表于 2016-1-18 14:14:30 | 显示全部楼层
回复 2# gawk

多谢 gawk ,确实是数值范围的问题。 但因为代码取到的剩余磁盘空间的单位是字节,所以数值会很大,请问是否有方法取出MB或GB单位的数据?多谢!
发表于 2016-1-18 15:05:25 | 显示全部楼层
简单的直接舍弃相应位数进行换算,如2147483648B≈2147483KB≈2147MB≈2GB
发表于 2016-1-19 16:24:53 | 显示全部楼层
本帖最后由 WHY 于 2016-1-20 10:06 编辑

可以在数字前面补上足够多的零,然后以字符串的方式比较
  1. @echo off
  2. set "zero=00000000000000000000"
  3. set "size=%zero%2147483648"
  4. for /f %%a in ('wmic LogicalDisk where "DeviceID='C:'" get FreeSpace^|findstr [0-9]') do set "free=%zero%%%a"

  5. if "%free:~-20%" gtr "%size:~-20%" (
  6.     echo 大于2GB
  7. ) else if "%free:~-20%" lss "%size:~-20%" (
  8.     echo 小于2GB
  9. ) else (
  10.     echo 等于2GB
  11. )
  12. pause
复制代码
也可以用vbs js powershell等等,举例:
  1. $p = (Get-wmiObject -query "Select * from win32_LogicalDisk where DeviceID='C:'").FreeSpace
  2. if($p -gt 2147483648){"大于2GB"}elseif($p -lt 2147483648){"小于2GB"}else{"等于2GB"}
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 11:21 , Processed in 0.018920 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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