如何在Windows中使用SET命令进行浮点算术。 / A代表算术,%VAR%打印VAR的数据而不是名称。
例如,当我这样做时:
SET /A VAR="2.5+3.1"
ECHO %VAR%
pause
我收到错误:'缺少操作员'。 输出(5.6)也应该转换为浮点
我还在忙着学习基本语法。
问候,狙击
答案 0 :(得分:5)
SET / A命令的算术运算仅在32位整数上执行;但是,如果您选择多个十进制数字并在整个操作过程中保留它们,您可以使用SET / A轻松模拟定点操作。例如:
REM Select two decimal digits for all operations
SET /A VAR=250+310
ECHO RESULT: %VAR:~0,-2%.%VAR:~-2%
此方法允许您直接执行两个“固定点”数字的加或减。当然,如果你想以通常的方式输入数字(带小数点),你必须在执行操作之前消除小数点并留下零。
您也可以直接将FP(定点)数乘以或除以整数,结果是正确的。为了乘以或除以两个FP数,我们可以使用一个名为ONE的辅助变量,其中包含正确的小数位数。例如:
rem Set "ONE" variable with two decimal places:
SET ONE=100
rem To multiply two FP numbers, divide the result by ONE:
SET /A MUL=A*B/ONE
rem To divide two FP numbers, multiply the first by ONE:
SET /A DIV=A*ONE/B
this post的进一步详情。
答案 1 :(得分:4)
你不能用batch做这个。它只适用于整数。 但是你可以使用Jscript或powershell:
>powershell 5.6+3.1
8.7
对于jscript,您需要创建aditional bat并调用它(例如jscalc.bat):
@if (@x)==(@y) @end /***** jscript comment ******
@echo off
cscript //E:JScript //nologo "%~f0" %*
exit /b 0
@if (@x)==(@y) @end ****** end comment *********/
WScript.Echo(eval(WScript.Arguments.Item(0)));
示例:
>jscalc.bat "4.1+4.3"
8.4
请记住,上面的jscript不是很强大,也不会处理不良的格式化表达。
要在两种情况下将结果设置为变量,您需要换行FOR /F
:
>for /f "delims=" %# in ('powershell 5.6+3.1') do set result=%#
>set result=8.7
>for /f "delims=" %# in ('jscalc 5.6+3.1') do set result=%#
>set result=8.7
很可能你已经安装了powershell,但它并非在所有机器上都可用(默认情况下没有安装在Vista,XP,2003上)所以如果你没有安装它,那么你是否需要jscalc.bat
而且你也可以使用jscript.net(另一个jscript)。创建一个使用它的.bat文件有点冗长并创建一个小的.exe文件,但也是一个选项。这就是jsnetcalc.bat
:
@if (@X)==(@Y) @end /****** silent jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
if exist "%~n0.exe" goto :skip_compilation
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
if exist "%%v\jsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxv\jsc.exe"
goto :break_loop
)
)
echo jsc.exe not found && exit /b 0
:break_loop
call %jsc% /nologo /out:"%~n0.exe" "%~f0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0
****** end of jscript comment ******/
import System;
var arguments:String[] = Environment.GetCommandLineArgs();
Console.WriteLine( eval(arguments[1]) );
示例:
>jsnetcalc.bat 4.5+7.8
12.3
甚至还有一种使用MSHTA的方法(在表达式中设置你想要计算的表达式):
@echo off
setlocal
:: Define simple macros to support JavaScript within batch
set "beginJS=mshta "javascript:close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(eval("
set "endJS=)));""
set "expression=8.5+3.5"
:: FOR /F does not need pipe
for /f %%N in (
'%beginJS% %expression% %endJS%'
) do set result=%%N
echo result=%result%
可以编辑接受上面例子中的参数......