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

[数值计算] [分享]批处理四舍五入函数

本帖最后由 ht河豚 于 2014-8-29 08:59 编辑

发给大家一个能四舍五入的函数,自己写的.
论坛好像还没有这方面的内容,自己写了这么一个函数.
貌似等级不够所以发到这里,方便大家使用
可以修改函数内kp的变量值
达到修改保留位数的目的(kp=2即为保留2位小数)
(本来想把这个做成一个选项的,太懒了)
  1. :int 小数 保存的变量
  2. @echo off&setlocal enabledelayedexpansion
  3. set int=%~1
  4. set kp=2
  5. for /f "tokens=1,2 delims=." %%i in ("!int!") do (
  6. if "%%j"=="" (endlocal&set %~2=%int%&goto :eof)
  7. set pf=%%j
  8. set pfd=!pf:~0,%kp%!
  9. set pfc=!pf:~%kp%,1!
  10. if "!pfc!"=="0" (
  11. if !pfc! GEQ 5 set /a result=%%i+1
  12. if !pf! LSS 5 set /a result=%%i
  13. )
  14. if not "!pfc!"=="0" (
  15. if !pfc! GEQ 5 set /a tmp=!pfd!+1
  16. if !pfc! LSS 5 set /a tmp=!pfd!
  17. set result=%%i.!tmp!
  18. )
  19. )
  20. endlocal&set %~2=%result%&goto :eof
复制代码
刚刚那个好像有很多BUG,修改了V2结果发现仅能在小数使用
又修了V3这回应该没什么问题了
======V3======
  1. :int 小数 输出变量
  2. setlocal enabledelayedexpansion
  3. set int=%~1.
  4. if not defined kp set kp=2
  5. if "%kp%"=="0" (set int=!int!0) Else for /l %%i in (1 1 %kp%) do set int=!int!0
  6. for /f "tokens=1,2,3 delims=." %%i in ("!int!") do (
  7. if not "%kp%"=="0" if %%j EQU 0 (endlocal&set %~2=%%i.%%j&goto :eof)
  8. echo !int!
  9. set pf=%%j
  10. set pfe=!pf:~0,1!
  11. set pfd=!pf:~0,%kp%!
  12. set pfc=!pf:~%kp%,1!
  13. if "!kp!"=="0" (
  14. if !pfe! GEQ 5 set /a result=%%i+1
  15. if !pfe! LSS 5 set /a result=%%i
  16. ) ELSE (
  17. if !pfc! GEQ 5 set /a tmp1=!pfd!+1
  18. if !pfc! LSS 5 set /a tmp1=!pfd!
  19. set result=%%i.!tmp1!
  20. )
  21. )
  22. endlocal&set %~2=%result%&goto :eof
复制代码
1

评分人数

返回列表