Batch file 如何设置pi并将其用于转换批处理文件中正方形的面积

Batch file 如何设置pi并将其用于转换批处理文件中正方形的面积,batch-file,Batch File,它不会读取带小数点的值 @echo off echo Area of a Square echo Enter the radius of a circle: set /p rad= set pi=3.14159 set /a area=%pi%*%rad%*%rad% echo The area of a Square is: %area% pause>nul 首先,在使用“SET/A”时,不需要在变量周围使用%: set /a area=pi*rad*rad 不幸的是

它不会读取带小数点的值

@echo off

echo Area of a Square

echo Enter the radius of a circle:

set /p rad=

set pi=3.14159

set /a area=%pi%*%rad%*%rad%

echo The area of a Square is: %area%

pause>nul
首先,在使用“SET/A”时,不需要在变量周围使用%:

set /a area=pi*rad*rad

不幸的是,我不认为有一种简单的方法只使用纯批处理来计算小数,但是仍然可以在批处理脚本中使用WScript。我发现了一个非常有用的函数。我只是稍微修改了一下,这样更实用

:Eval [expression]
  echo Wscript.Echo Eval(WScript.Arguments.Item(0))>"%~dp0eval.vbs"
  for /F "tokens=*" %%A in ('cscript //nologo eval.vbs "%~1"') do set eval=%%A
  if exist "%~dp0eval.vbs" del "%~dp0eval.vbs"
  exit /b
它可以用于直接在批处理脚本中“评估”某些WScript代码


在这里,我将这个函数合并到您的脚本中,它似乎工作得很好。如果希望结果的小数位数更多,则需要更改“Round”函数的第二个参数

@echo off

echo Area of a Square

echo Enter the radius of a circle:

set /p rad=

set pi=3.14159

:: set /a area=pi*rad*rad

call :Eval "round(%pi%*%rad%*%rad%, 2)"
set area=%Eval%

echo The area of a Square is: %area%

pause & exit /b

:Eval [expression]
  echo Wscript.Echo Eval(WScript.Arguments.Item(0))>"%~dp0eval.vbs"
  for /F "tokens=*" %%A in ('cscript //nologo eval.vbs "%~1"') do set eval=%%A
  if exist "%~dp0eval.vbs" del "%~dp0eval.vbs"
  exit /b


正如SteveFest在评论部分指出的那样,仍然可以使用纯批处理和可下载的数学库,该库将是“模拟纸笔计算”。
在我看来,这一页上的问题有点过火,但是您可以选择更适合自己的选项。

解决32位有符号整数限制的一个选项是将PI指定为整数,如
314159
(实际上是PI*10^4),然后进行计算(假设半径是整数值,PI*10^4*radius^2不超过限制2^31-1),然后通过字符串操作将
插入最后4个数字的前面(因此半径限制为82;对PI使用一个较小的数字,如
31416
允许半径最大为261,等等)…这包含错误信息-百分号可以存在,不会造成差异。我从来没有说过它们不存在,我说过“你不需要使用它们”。非常简单的英语…好的。但是“更正”和“取而代之”部分可以被忽略?因为“更正”“确实会让人们认为%不应该出现在本页上,解决方案是:1。像我一样使用JScript。。。或2。正在使用Powershell。。。你不能只使用纯批次!有可能是一个可以模拟笔计算,一步一步,即使它包含小数点,只需删除小数点