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

[数值计算] [已解决]批处理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
复制代码

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

TOP

回复 2# newswan

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

TOP

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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

TOP

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

回复 5# yakeyun

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

TOP

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

回复 3# yakeyun


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

TOP

本帖最后由 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

TOP

返回列表