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