如何在字符串内进行除法和舍入?

如何在字符串内进行除法和舍入?

我是脚本编写新手,正在使用一个与 Windows cmd 完全相同的工具。我的输入文本文件是:

age=min;age_1D_param_min_64;meas_time =

我的批处理文件从此输入中读取行并用“;”拆分行,然后使用第二个字段中的标记和年龄文件执行一个函数,最后解析第三行的输出。在下面您可以看到我当前的批处理文件:

setlocal EnableDelayedExpansion
for /f "tokens=1,2,3* delims=;" %%a in (input.txt) do (
REM create token file
echo.%%a>current.tok

sinoparam -p D:\product\%%b 0x0100001F current.tok> out.txt

for /f %%y in ('findstr /C:"%%c" out.txt ^| sed "s/.*%%c .............. )do SET RESULT=%%y

echo.%%a;%%b;%%c;!RESULT!>>finaloutput.csv
)
GOTO :EOF

现在我对 out.txt 中的一个字符串有问题,它是执行我的函数的结果:

meas_time =31.9999

在我的批处理文件中我想执行以下操作:

  1. dActual_age =31.9999通过以下方式查找字符串中的值findstr/C

  2. 如果值低于 1000,则四舍五入并显示结果。

  3. 如果大于 1000,则先除以 32,然后对结果进行四舍五入。

答案1

批处理文件中的数学运算通常使用set /A,并且set不提供对数字进行舍入的方法;它也只处理整数运算。

您需要找到一个可以从批处理脚本中执行所需数学运算的命令行工具,或者切换到功能更强大的脚本语言(例如:PowerShell - 向下舍入到最接近的整数, 或者VB脚本)。

答案2

  • 命令SET /A可以执行除法并且总是向下舍入(floor())。
    set /A calculation=10 / 3
    echo %calculation%
    REM will print "3"
  • 您还可以在计算中使用变量
    set dividend=10
    set divisor=3
    set /A calculation=%dividend% / %divisor%
    echo %calculation%
    REM will print "3"
  • 由于四舍五入,你必须记住先乘,然后除
    set /A percentage=%current% / %max% * 100
    echo %percenage%%
    REM will print 0% (unless over 100%)

    set /A percentage=%current% * 100 / %max%
    echo %percenage%%
    REM will print xx%
  • 向上舍入 (ceil())您需要将左侧值增加右侧值并删除一个(例如ceil(10 / 3) == floor((10 + (3 - 1)) / 3)
    set dividend=10
    set divisor=3
    set /A calculation=(%dividend% + %divisor% - 1) / %divisor%
    echo %calculation%
    REM will print "4"

相关内容