微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SET命令 – 浮点数?

如何在Windows中使用SET命令进行浮点运算。 / A表示算术和%VAR%打印VAR的数据不是名称

例如,当我这样做:

SET /A VAR="2.5+3.1" ECHO %VAR% pause

我得到错误:'失踪的运营商'。 输出(5.6)也应该转换为浮点

我仍然在忙于学习基本的语法。

OpenCL中的浮点错误通过ssh

在Linux和Windows上相同的计算 – >不同的结果

linux浮点_control87replace

浮点四舍五入在shell中

有什么办法可以确保浮点的输出在不同的操作系统中是一样的吗?

问候,鹬

FPU命令FLDL在ST0中将double转换为long double

“计算器错误”是一个代码问题?

为SIGFPE设置标志并继续执行,忽略FPE

浮点比较失败没有任何明显的原因(Linux上的32位X86)

从/ dev / urandom获取一个浮点数

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

在这个职位的进一步细节。

你不能这样做batch.It只适用于整数。 但是你可以使用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.NETFrameworkv*"') do ( if exist "%%vjsc.exe" ( rem :: the javascript.net compiler set "jsc=%%~dpsnfxvjsc.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%

可以编辑接受像上面的例子也参数…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐