伙计我有一个文本框,用户可以输入有效的十进制数字。 后来我不得不用这个十进制数进行计算而没有舍入它。请帮助我在cmd
答案 0 :(得分:1)
Pure batch仅支持32位整数,因此您必须进行一些更改才能使其工作并不困难,但是脚本稍大一些。而是使用vbscript
和batch
的组合。
创建一个文件,并将其命名为MyCalc.cmd
,然后将其粘贴到其中:
@echo off
setlocal
>"%temp%\calculate.vbs" echo Set clc = CreateObject("Scripting.FileSystemObject") : Wscript.echo (%*)
for /f "delims=" %%a in ('cscript /nologo "%temp%\calculate.vbs"') do set "var=%%a"
echo %var%
del "%temp%\calculate.vbs"
要使用它,请打开cmd.exe
cd到您保存的文件所在的位置,然后运行MyCalc.cmd 10*0.5
或MyCalc.cmd 8.2/0.5
或MyCalc.cmd 3.2-0.3
或MyCalc.cmd 10+9.5
等。< / p>
或者,将脚本的路径添加到系统的PATH
环境中,您不必cd
,也可以直接从cmdline调用d:\path to file\scripts\MyBat.cmd 10+2.3
等。< / p>
答案 1 :(得分:1)
这是batch / vbscript hybrid
批处理传递参数并解析结果并将其存储在变量Result
::'@echo off &for /f "delims=" %%a in ('cscript //nologo //e:vbscript "%~f0" "%*"') do set "Result=%%a"
::'echo(Result=%Result%&exit /b
Wscript.echo Eval(Wscript.Arguments(0))
wscript.quit
::'
之后有一个隐形字符(我希望它们被转移)
批处理文件存储为Math.cmd
的一些示例(我的语言环境设置有小数点逗号)
>Math 3.76 + 2.54
Result=6,3
>Math 3.76 - 2.54
Result=1,22
>Math 3.76 * 2.54
Result=9,5504
>Math 3.76 / 2.54
Result=1,48031496062992
答案 2 :(得分:0)
此解决方案是早期帖子提供的解决方案 here
@echo off
setlocal EnableDelayedExpansion
set decimals=2
set /A one=1, decimalsP1=decimals+1
for /L %%i in (1,1,%decimals%) do set "one=!one!0"
:getNumber
set /P "numA=Enter a number with %decimals% decimals: "
if "!numA:~-%decimalsP1%,1!" equ "." goto numOK
echo The number must have a point and %decimals% decimals
goto getNumber
:numOK
set numB=2.54
set "fpA=%numA:.=%"
set "fpB=%numB:.=%"
set /A add=fpA+fpB, sub=fpA-fpB, mul=fpA*fpB/one, div=fpA*one/fpB
echo %numA% + %numB% = !add:~0,-%decimals%!.!add:~-%decimals%!
echo %numA% - %numB% = !sub:~0,-%decimals%!.!sub:~-%decimals%!
echo %numA% * %numB% = !mul:~0,-%decimals%!.!mul:~-%decimals%!
echo %numA% / %numB% = !div:~0,-%decimals%!.!div:~-%decimals%!
例如:
Enter a number with 2 decimals: 3.76
3.76 + 2.54 = 6.30
3.76 - 2.54 = 1.22
3.76 * 2.54 = 9.55
3.76 / 2.54 = 1.48
答案 3 :(得分:0)
尝试一下:
@echo off
set /p x=PLS Enter Your decision =
echo WSH.Echo Eval(Wscript.Arguments(0))>>Q.vbs
cscript //nologo Q.vbs %x%
Del "Q.vbs"
Pause>nul