标题: [数值计算] 如何解决比较两个大的数字出现误判/判断错误/有误的问题? [打印本页]
作者: 0780506008 时间: 2016-1-18 10:06 标题: 如何解决比较两个大的数字出现误判/判断错误/有误的问题?
本帖最后由 pcl_test 于 2017-4-10 13:52 编辑
各位大神,我在脚本中需要比较两个变量值的大小,但是发现使用 gtr 和 lss去比较是存在问题的,比如变量A=134991245312 变量B=2147483648,那么比较的结果是变量A小于变量B。 看起来是按照从左到右的顺序去比较了,是否需要先将变量的值转换成数字类型?不知道能否进行这样的转换,请各位赐教,非常感谢!- cd C:\
- C:
- set size=2147483648
- for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "DeviceID='C:'" get FreeSpace /value') do (
- echo %%a
- echo %size%
- if %%a gtr %size% (
- echo %date%----磁盘空间剩余大于2GB
- )else if %%a lss %size% (
- echo %date%----磁盘空间剩余小于2GB
- ) else (
- echo %date%----磁盘空间剩余等于2GB
- )
- )
- echo %date%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^磁盘空间检查完成
- pause
复制代码
作者: gawk 时间: 2016-1-18 14:00
134991245312 这个数字太大,超过了BAT能够直接计算的范围。
作者: 0780506008 时间: 2016-1-18 14:14
回复 2# gawk
多谢 gawk ,确实是数值范围的问题。 但因为代码取到的剩余磁盘空间的单位是字节,所以数值会很大,请问是否有方法取出MB或GB单位的数据?多谢!
作者: pcl_test 时间: 2016-1-18 15:05
简单的直接舍弃相应位数进行换算,如2147483648B≈2147483KB≈2147MB≈2GB
作者: WHY 时间: 2016-1-19 16:24
本帖最后由 WHY 于 2016-1-20 10:06 编辑
可以在数字前面补上足够多的零,然后以字符串的方式比较- @echo off
- set "zero=00000000000000000000"
- set "size=%zero%2147483648"
- for /f %%a in ('wmic LogicalDisk where "DeviceID='C:'" get FreeSpace^|findstr [0-9]') do set "free=%zero%%%a"
-
- if "%free:~-20%" gtr "%size:~-20%" (
- echo 大于2GB
- ) else if "%free:~-20%" lss "%size:~-20%" (
- echo 小于2GB
- ) else (
- echo 等于2GB
- )
- pause
复制代码
也可以用vbs js powershell等等,举例:- $p = (Get-wmiObject -query "Select * from win32_LogicalDisk where DeviceID='C:'").FreeSpace
- if($p -gt 2147483648){"大于2GB"}elseif($p -lt 2147483648){"小于2GB"}else{"等于2GB"}
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |