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

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

[复制链接]
发表于 2021-7-14 13:44:21 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
发表于 2021-7-14 13:54:05 | 显示全部楼层
用 powershell ,调用要慢些
  1. powershell -command " ( 111.79 * 1024 / 3 ) * 2 "
复制代码
 楼主| 发表于 2021-7-14 14:19:23 | 显示全部楼层
回复 2# newswan

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

发表于 2021-7-14 14:26:17 | 显示全部楼层
 楼主| 发表于 2021-7-14 14:52:40 | 显示全部楼层
本帖最后由 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

 楼主| 发表于 2021-7-14 15:02:58 | 显示全部楼层
本帖最后由 yakeyun 于 2021-7-14 16:02 编辑

回复 5# yakeyun

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

回复 3# yakeyun


    有点麻烦,powershell 方便,但是慢。。。。
    用awk
  1. echo | awk '{ printf "%.2f\n" , 1024 * 1024 * 1024 * 1024 / 3}'
复制代码
 楼主| 发表于 2021-7-19 16:41:37 | 显示全部楼层
本帖最后由 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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 22:24 , Processed in 0.031916 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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