Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件浮点数学_Batch File - Fatal编程技术网

Batch file 批处理文件浮点数学

Batch file 批处理文件浮点数学,batch-file,Batch File,我正在尝试创建一个批处理,该批处理将使用输入变量计算某个等式。 等式是 (%b%+(%b%*(88/100))+(%b%*(165/100))+(%b%*(%r%/100)))*%c% 我目前正在使用我在这里找到的代码,但它似乎不能正常工作 SETLOCAL EnableExtensions EnableDelayedExpansion @echo off echo Enter BaseCC set /P b= echo Enter Riven ( if none enter 1 ) set

我正在尝试创建一个批处理,该批处理将使用输入变量计算某个等式。 等式是

(%b%+(%b%*(88/100))+(%b%*(165/100))+(%b%*(%r%/100)))*%c%
我目前正在使用我在这里找到的代码,但它似乎不能正常工作

SETLOCAL EnableExtensions EnableDelayedExpansion
@echo off
echo Enter BaseCC
set /P b=
echo Enter Riven ( if none enter 1 )
set /P r=
echo Enter Combo Multiplier
set /P c=
call :calc_ 2 (%b%+(%b%*(88/100))+(%b%*(165/100))+(%b%*(%r%/100)))*%c%
echo !calc_v!
pause
goto :EOF
:calc_
set scale_=1
set calc_v=
for /l %%i in (1,1,%1) do set /a scale_*=10
set /a "calc_v=!scale_!*%2"
set /a calc_v1=!calc_v!/!scale_!
set /a calc_v2=!calc_v!-!calc_v1!*!scale_!
set calc_v=!calc_v1!.!calc_v2!
goto :EOF
如果b是20;r为114;c是3 结果应该是280.2

我得到的结果是180.0

@ECHO OFF SETLOCAL rem方程为%b%++%b%*88/100++%b%*165/100++%b%*%r%/100*%c% 回显输入BaseCC 成套设备= 如果没有输入1,则返回输入Riven 设置/打印= 回声输入组合乘法器 成套设备/应付账款= ::计算%b%++%b%*88/100++%b%*165/100++%b%*%r%/100*%c% ::用FP术语写:b+0.88b+1.65b+br/100*c ::解析为3.53b+br/100*c=353b+br*c/100 :=353+r*b*c/100 设置/a结果由\u 100=353+r*b*c 回显结果=%result\u by\u 100:~0,-2%。%result\u by\u 100:~-2% 后藤:EOF 问题是,术语%b%++%b%*88/100++%b%*165/100++%b%*%r%/100*%c%是使用整数数学来解决的,因此每个实现除法的术语都被解析为整数。结果是`%b%++%b%*INT88/100++%b%*INT165/100++%b%INT%r%/100%c%


简单的解决方案是解析如下所示的公式。

根据Stephan的建议找到了解决方案。 它现在可以正常工作了。 我不知道我可以实现vbs

@echo off
set /p b=BaseCC= 
set /p r=Riven= 
set /p c=Combo= 
echo WSH.Echo Eval(Wscript.Arguments(0))>>Q.vbs
cscript //nologo Q.vbs ((%b%+(%b%*(88/100))+(%b%*(165/100))+(%b%*(%r%/100)))*%c%)
Del "Q.vbs"
Pause>nul

批处理文件绝对不是浮点数学的正确工具。我建议你改为使用来寻找解决方案,为此你需要包括这个标记。使用另一种语言的帮助,它实际上可以处理浮点数。您可以找到一些使用批处理的vbscript.im的有用示例,因为它是最简单的一个,但不适用于此任务。你甚至已经证明了这一点,在你发布的解决方案中使用了for the math!简单地说,我的意思是这些命令是基本的,不需要编译,也不需要任何附加的应用程序。但是,是的,有时候它可能不擅长简单的任务