Board logo

标题: [数值计算] [已解决]批处理set /a不会计算小数部分有没有什么方法可以解决 [打印本页]

作者: yakeyun    时间: 2021-7-14 13:44     标题: [已解决]批处理set /a不会计算小数部分有没有什么方法可以解决

本帖最后由 yakeyun 于 2021-7-19 16:31 编辑

计算代码如下,已知set /a命令不会计算小数部分,只会取整计算,请问有什么其它命令可以解决吗。
  1. @echo off
  2. set a=111.79
  3. set /a b=a*1024/3
  4. set /a c=b*2
  5. echo %b%
  6. echo %c%
  7. pause>nul
复制代码

作者: newswan    时间: 2021-7-14 13:54

用 powershell ,调用要慢些
  1. powershell -command " ( 111.79 * 1024 / 3 ) * 2 "
复制代码

作者: yakeyun    时间: 2021-7-14 14:19

回复 2# newswan

好的,谢谢。
我也尝试了另一种方法:1.用for语句提取整数和小数分别计算;2.小数部分计算的值再取整,然后去掉后面2位数。最后用整数和小数部分的值做加法,可以达到一样的效果。


作者: Batcher    时间: 2021-7-14 14:26

回复 1# yakeyun


参考:批处理浮点计算
http://bbs.bathome.net/thread-3322-1-1.html
http://bbs.bathome.net/thread-3372-1-1.html
作者: yakeyun    时间: 2021-7-14 14:52

本帖最后由 yakeyun 于 2021-7-14 17:12 编辑

回复 3# yakeyun


最终测试代码:
@echo off
setlocal enabledelayedexpansion
set a=111.79
set /a b=a*1024/3
set /a c=b*2
echo %b%
echo %c%
::下面步骤用于分别提取数据再计算结果,尽量误差最小化。
for /f "delims=. tokens=1,*" %%i in ('echo %a%') do (
echo ::输出整数部分
echo %%i
echo ::输出小数部分
echo %%j
set /a a1=%%i*1024/3
set /a a2=%%j*1024/3
)
echo ::输出整数部分GB换算到MB:a1
echo %a1%
echo ::输出小数部分GB换算到MB:a2'
echo %a2%
for /f "delims=. tokens=1,*" %%k in ('echo %a2:~0,-2%') do (
echo ::小数部分计算数值取整,然后再去掉后两位数值。
echo %%k
set a2=%%k
)
set /a MB=a1+b1
echo ::输出GB转换MB总容量:a1+a2
echo %MB%
pause>nul


作者: yakeyun    时间: 2021-7-14 15:02

本帖最后由 yakeyun 于 2021-7-14 16:02 编辑

回复 5# yakeyun

这里后面的提取部分还是有一些小瑕疵,考虑到系统容量一般只会显示小数点后2位,所以取数值前3位方法还是可取的。最完美的方法就是先提取数值,然后用"."位移操作,把后两位隔离开再用set /a取一次值就完美了。(这个方法适用于小数点位数大于2位,或者乘数过大时)
作者: newswan    时间: 2021-7-14 15:57

本帖最后由 newswan 于 2021-7-14 19:40 编辑

回复 3# yakeyun


    有点麻烦,powershell 方便,但是慢。。。。
    用awk
  1. echo | awk '{ printf "%.2f\n" , 1024 * 1024 * 1024 * 1024 / 3}'
复制代码

作者: yakeyun    时间: 2021-7-19 16:41

本帖最后由 yakeyun 于 2021-7-19 16:43 编辑

回复 7# newswan

shell调用计算代码:

@echo off
for /f %%a in ('powershell -command " ( 111.79 * 1024 / 3 ) * 2 "') do for /f "delims=. tokens=1" %%m in ('echo,%%a') do echo,%%m
pause >nul






欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2