Как сделать расчет десятичных чисел в cmd - PullRequest
0 голосов
/ 10 мая 2018

У меня есть пакетный файл, и когда пользователь пишет номер, то автоматически добавляет номера вместе. Но если пользователь пишет десятичное число, Cmd не может рассчитать.

Есть идеи?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Это решение предоставлено из более ранней публикации здесь

@echo off
setlocal EnableDelayedExpansion

set decimals=2

set /A one=1, decimalsP1=decimals+1
for /L %%i in (1,1,%decimals%) do set "one=!one!0"

:getNumber
set /P "numA=Enter a number with %decimals% decimals: "
if "!numA:~-%decimalsP1%,1!" equ "." goto numOK
echo The number must have a point and %decimals% decimals
goto getNumber

:numOK
set numB=2.54

set "fpA=%numA:.=%"
set "fpB=%numB:.=%"

set /A add=fpA+fpB, sub=fpA-fpB, mul=fpA*fpB/one, div=fpA*one/fpB

echo %numA% + %numB% = !add:~0,-%decimals%!.!add:~-%decimals%!
echo %numA% - %numB% = !sub:~0,-%decimals%!.!sub:~-%decimals%!
echo %numA% * %numB% = !mul:~0,-%decimals%!.!mul:~-%decimals%!
echo %numA% / %numB% = !div:~0,-%decimals%!.!div:~-%decimals%!

, например:

Enter a number with 2 decimals: 3.76
3.76 + 2.54 = 6.30
3.76 - 2.54 = 1.22
3.76 * 2.54 = 9.55
3.76 / 2.54 = 1.48
0 голосов
/ 10 мая 2018

Вот гибрид пакета / vbscript.
Пакет передает аргументы, анализирует результат и сохраняет его в переменной Result

::'@echo off &for /f "delims=" %%a in ('cscript //nologo //e:vbscript "%~f0" "%*"') do set "Result=%%a"
::'echo(Result=%Result%&exit /b
Wscript.echo Eval(Wscript.Arguments(0))
wscript.quit

За ::' стоит один невидимый символ (надеюсь, что его переведут)

Некоторые примеры, где командный файл хранится как Math.cmd (в настройках моей локали вводится десятичная запятая)

>Math 3.76 + 2.54
Result=6,3

>Math 3.76 - 2.54
Result=1,22

>Math 3.76 * 2.54
Result=9,5504

>Math 3.76 / 2.54
Result=1,48031496062992
0 голосов
/ 10 мая 2018

Pure batch поддерживает только 32-битные целые числа, поэтому вам нужно внести некоторые изменения, чтобы заставить его работать, что не сложно, но представляет собой немного больший скрипт. Вместо этого используйте комбинацию vbscript и batch. Создайте файл и назовите его как MyCalc.cmd и вставьте в него следующее:

@echo off
setlocal
>"%temp%\calculate.vbs" echo Set clc = CreateObject("Scripting.FileSystemObject") : Wscript.echo (%*)
for /f "delims=" %%a in ('cscript /nologo "%temp%\calculate.vbs"') do set "var=%%a"
echo %var%
del "%temp%\calculate.vbs"

Чтобы использовать его, откройте cmd.exe компакт-диск, где находится файл, который вы сохранили, затем выполните MyCalc.cmd 10*0.5 или MyCalc.cmd 8.2/0.5 или MyCalc.cmd 3.2-0.3 или MyCalc.cmd 10+9.5 и т. Д.

В качестве альтернативы, добавьте путь к сценарию в системное PATH окружение, и вам не нужно cd к нему или просто вызвать его прямо из cmdline как d:\path to file\scripts\MyBat.cmd 10+2.3 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...