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!简单地说,我的意思是这些命令是基本的,不需要编译,也不需要任何附加的应用程序。但是,是的,有时候它可能不擅长简单的任务