如何在Windows中使用SET命令进行浮点运算。 /A 代表算术,%VAR% 打印 VAR 的数据而不是名称。
例如当我这样做时:
SET /A VAR="2.5+3.1"
ECHO %VAR%
pause
我收到错误:“缺少操作员”。 输出(5.6)也应该转换为浮点
我还在忙着学习基本语法。
问候,狙击手
SET /A命令的算术运算仅对32位整数进行;但是,如果您选择一些小数位并在整个操作过程中保留它们,则可以使用 SET /A 轻松地“模拟”定点操作。例如:
REM Select two decimal digits for all operations
SET /A VAR=250+310
ECHO RESULT: %VAR:~0,-2%.%VAR:~-2%
此方法允许您直接执行两个“定点”数字的加法或减法。当然,如果你想用通常的方式(带小数点)输入数字,就必须去掉小数点并留零才能进行运算。
您也可以直接将 FP(定点)数乘以或除以整数,结果也是正确的。为了乘或除两个 FP 数,我们可以使用一个名为 ONE 的辅助变量,该变量具有正确的小数位数。例如:
rem Set "ONE" variable with two decimal places:
SET ONE=100
rem To multiply two FP numbers, divide the result by ONE:
SET /A MUL=A*B/ONE
rem To divide two FP numbers, multiply the first by ONE:
SET /A DIV=A*ONE/B
更多详情请参见这篇文章
>powershell 5.6+3.1
8.7
对于 jscript,您需要创建额外的 bat 并调用它(例如 jscalc.bat):
@if (@x)==(@y) @end /***** jscript comment ******
@echo off
cscript //E:JScript //nologo "%~f0" %*
exit /b 0
@if (@x)==(@y) @end ****** end comment *********/
WScript.Echo(eval(WScript.Arguments.Item(0)));
示例:
>jscalc.bat "4.1+4.3"
8.4
请记住,上面的 jscript 不太健壮,并且无法处理格式错误的表达式。
要将这两种情况下的结果设置为变量,您需要一个包装
FOR /F
:
>for /f "delims=" %# in ('powershell 5.6+3.1') do set result=%#
>set result=8.7
>for /f "delims=" %# in ('jscalc 5.6+3.1') do set result=%#
>set result=8.7
很可能您已经安装了 powershell ,但并非在所有计算机上都可用(默认情况下未安装在 Vista、XP、2003 上),因此如果您没有安装,则需要
jscalc.bat
您也可以使用 jscript.net(另一个 jscript)。创建一个使用它的 .bat 文件有点冗长,并创建一个小的 .exe 文件,但也是一个选项。这是
jsnetcalc.bat
:
@if (@X)==(@Y) @end /****** silent jscript comment ******
@echo off
::::::::::::::::::::::::::::::::::::
::: compile the script ::::
::::::::::::::::::::::::::::::::::::
setlocal
if exist "%~n0.exe" goto :skip_compilation
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%\Microsoft.NET\Framework\v*"') do (
if exist "%%v\jsc.exe" (
rem :: the javascript.net compiler
set "jsc=%%~dpsnfxv\jsc.exe"
goto :break_loop
)
)
echo jsc.exe not found && exit /b 0
:break_loop
call %jsc% /nologo /out:"%~n0.exe" "%~f0"
::::::::::::::::::::::::::::::::::::
::: end of compilation ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation
::
::::::::::
"%~n0.exe" %*
::::::::
::
endlocal
exit /b 0
****** end of jscript comment ******/
import System;
var arguments:String[] = Environment.GetCommandLineArgs();
Console.WriteLine( eval(arguments[1]) );
示例:
>jsnetcalc.bat 4.5+7.8
12.3
甚至还有一种使用 MSHTA 的方法(在表达式中设置要计算的表达式):
@echo off
setlocal
:: Define simple macros to support JavaScript within batch
set "beginJS=mshta "javascript:close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(eval("
set "endJS=)));""
set "expression=8.5+3.5"
:: FOR /F does not need pipe
for /f %%N in (
'%beginJS% %expression% %endJS%'
) do set result=%%N
echo result=%result%
也可以编辑以接受像上面的示例一样的参数...
100 * 0.1
这样的简单计算批量进行就好了。因此,我做了第一个小解决方案,取得了可接受的结果。
也许有人喜欢通过更多步骤来改进它,并像我现在一样与堆栈社区分享。或者发现一些错误。我的脚本 atm 不是那么大,也许可以集成而无需添加很多行。
它仅适用于单一类型的操作。脚本决定是哪一个或者它们是否混淆了。
我的方法是使计算的整数获取最高位数,并在必要时用 ceros 填充,并(之后/之前)删除多余的 ceros。
@ECHO OFF
REM -> Seems to be a good approach to change directory to a safe folder...
SET "CurrentFolder=%CD%"
CD /D "%temp%"
SETLOCAL EnableExtensions EnableDelayedExpansion
ECHO/
SET CALC=10/2.5
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 4
ECHO/ Result: !Result!
ECHO/
SET CALC=2.5/000010
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 0.25
ECHO/ Result: !Result!
ECHO/
SET CALC=10/0.99
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 10.10101010101010101010101010101
ECHO/ Result: !Result!
ECHO/
SET CALC=0.7/0.38
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 1.8421052631578947368421052631579
ECHO/ Result: !Result!
ECHO/
SET CALC=15641/3.0810
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 5076.5985069782538136968516715352
ECHO/ Result: !Result!
ECHO/
SET CALC=5 / 0.0003
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 16666.666666666666666666666666667
ECHO/ Result: !Result!
ECHO/
SET CALC=1234*0.00008
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 0.09872
ECHO/ Result: !Result!
ECHO/
SET CALC=-515415+987165.001
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 471750.001
ECHO/ Result: !Result!
ECHO/
SET CALC=515415-515414.010
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 0.99
ECHO/ Result: !Result!
ECHO/
SET CALC=515415.09-515414.0001
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 1.0899
ECHO/ Result: !Result!
ECHO/
SET CALC=5415.09-5414.0001
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 1.0899
ECHO/ Result: !Result!
ECHO/
SET CALC=5415.09-15414.0001
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: -9998.9101
ECHO/ Result: !Result!
ECHO/
SET CALC=300 * 0.04
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 12
ECHO/ Result: !Result!
ECHO/
SET CALC=5414.09-5414.0001
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: 0.0899
ECHO/ Result: !Result!
ECHO/
ECHO -------------------------------------------------
ECHO Result * 105.3
ECHO -------------------------------------------------
SET CALC=!Result! * 105.3
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat Result "!CALC!"
ECHO/ Pre-Calc: ?
ECHO/ Result: !Result!
ECHO -------------------------------------------------
ECHO/
SET CALC=5414.09-5414.0001 * 42
ECHO/ Original: !CALC!
CALL :HandleFloat "%CALC%" CALCDEF DIGITS
ECHO/ DeFloated: !CALCDEF!
ECHO/ Digits: !DIGITS!
CALL :CalcFloat NoResult "!CALC!"
ECHO/ Pre-Calc: What was the question?
ECHO/ Result: !NoResult!
GOTO :EndOfBatch
REM -> CALL :CalcFloat OUTPUTVAR "Calculation" (PRECISION)
REM -> Allows calculations with floating point numbers. E.g.:
REM -> :CalcFloat OUTPUTVAR "7/2" 2 would set OUTPUTVAR to 3.5
REM -> You cannot mix multiplication or division with addition or subtraction (for now)!
REM <- Default value for PRECISION is 2.
REM -> 2147483647+1 = -2147483648 <-> 2147483647+2 = -2147483647 <-> 2147483647+3 = -2147483646 ...
:CalcFloat
IF "%~1" == "" EXIT /B 1
IF "%~2" == "" EXIT /B 1
CALL :HandleFloat "%~2" DeFloated NumDigits
SET /A CalcFloatPrecision=2
IF NOT "%~3" == "" (
SET /A CalcFloatPrecision=%~3
) ELSE IF "!NumDigits!" GEQ "4" (
SET /A CalcFloatPrecision=1
)
CALL :StrLen DeFloatedLen DeFloated
SET CalcFloatMode=
FOR /L %%I IN (0,1,%DeFloatedLen%) DO (
IF "!DeFloated:~%%I,1!" == "-" (
IF "!CalcFloatMode!" == "SCALE" GOTO :CalcFloatConfused
IF "!CalcFloatMode!" == "MULTI" GOTO :CalcFloatConfused
SET CalcFloatMode=BASIC
) ELSE IF "!DeFloated:~%%I,1!" == "+" (
IF "!CalcFloatMode!" == "SCALE" GOTO :CalcFloatConfused
IF "!CalcFloatMode!" == "MULTI" GOTO :CalcFloatConfused
SET CalcFloatMode=BASIC
) ELSE IF "!DeFloated:~%%I,1!" == "/" (
IF "!CalcFloatMode!" == "BASIC" GOTO :CalcFloatConfused
IF "!CalcFloatMode!" == "MULTI" GOTO :CalcFloatConfused
SET CalcFloatMode=SCALE
) ELSE IF "!DeFloated:~%%I,1!" == "*" (
IF "!CalcFloatMode!" == "BASIC" GOTO :CalcFloatConfused
IF "!CalcFloatMode!" == "SCALE" GOTO :CalcFloatConfused
SET CalcFloatMode=MULTI
)
)
IF NOT DEFINED CalcFloatMode SET CalcFloatMode=SCALE
IF "!CalcFloatMode!" == "BASIC" (
SET /A CalcFloatBaseResult=!DeFloated!
IF "%NumDigits%" GTR "0" (
CALL :StrLen CalcFloatBaseResultLen CalcFloatBaseResult
IF "!CalcFloatBaseResultLen!" LEQ "!NumDigits!" (
FOR /L %%i IN (1,1,%NumDigits%) DO IF "%%i" GEQ "!CalcFloatBaseResultLen!" SET CalcFloatBaseResult=0!CalcFloatBaseResult!
)
SET CalcFloatBaseResult=!CalcFloatBaseResult:~0,-%NumDigits%!.!CalcFloatBaseResult:~-%NumDigits%!
)
SET "%~1=!CalcFloatBaseResult!"
) ELSE IF "!CalcFloatMode!" == "MULTI" (
SET /A CalcFloatBaseResult=!DeFloated!
SET /A NumDigits=!NumDigits! * 2
IF "!NumDigits!" GTR "0" (
CALL :StrLen CalcFloatBaseResultLen CalcFloatBaseResult
IF !CalcFloatBaseResultLen! LSS !NumDigits! (
FOR /L %%i IN (0,1,!NumDigits!) DO IF !CalcFloatBaseResultLen! LEQ %%i SET CalcFloatBaseResult=0!CalcFloatBaseResult!
)
FOR /F "tokens=1" %%F IN ("!NumDigits!") DO SET CalcFloatBaseResult=!CalcFloatBaseResult:~0,-%%F!.!CalcFloatBaseResult:~-%%F!
)
SET "%~1=!CalcFloatBaseResult!"
) ELSE (
SET CalcFloatScale=1
SET CalcFloatVal=
FOR /L %%i IN (1,1,%CalcFloatPrecision%) DO SET /A CalcFloatScale*=10
SET /A CalcFloatVal=!CalcFloatScale! * !DeFloated!
SET /A CalcFloatVal1=!CalcFloatVal! / !CalcFloatScale!
SET /A CalcFloatVal2=!CalcFloatVal! - !CalcFloatVal1! * !CalcFloatScale!
SET "%~1=!CalcFloatVal1!.!CalcFloatVal2!"
)
CALL :StrLen FinalCalcLen %~1
FOR /L %%i IN (0,1,!FinalCalcLen!) DO IF "!%~1:~%%i,1!" == "." GOTO :CalcFloatRemoveCero
EXIT /B 0
:CalcFloatRemoveCero
SET /A FinalCalcLen=!FinalCalcLen! - 1
FOR /F "tokens=1" %%F IN ("!FinalCalcLen!") DO IF NOT "!%~1:~%%F,1!" == "." IF "!%~1:~%%F,1!" == "0" (
SET "%~1=!%~1:~0,-1!
GOTO :CalcFloatRemoveCero
)
IF "!%~1:~-1!" == "." SET "%~1=!%~1:~0,-1!
EXIT /B 0
:CalcFloatConfused
ECHO Well multiplication or division do not work together with addition or subtraction atm.
EXIT /B 1
REM -> CALL :HandleFloat "INPUT" OUTPUT (DIGITS)
REM -> Turns all floating numbers into integers.
REM <- INPUT: The calculation as sting.
REM <- OUTPUT: The variable which will hold the calculation without floating numbers.
REM <- DIGITS: Optional, the variable which will hold the number of maximum digits.
:HandleFloat
IF "%~2" == "" EXIT /B 1
SET "InputCalc=%~1"
IF "!InputCalc!" == "" EXIT /B 1
REM -> Stage I: Get the maximum digits.
CALL :StrLen InputCalcLen InputCalc
IF %InputCalcLen% EQU 0 EXIT /B
SET /A InputCalcNumberDigits=0
SET /A InputCalcNumberDigitsPrev=0
SET "InputCalc=!InputCalc!#"
FOR /L %%I IN (0,1,%InputCalcLen%) DO (
SET InputCalcCharIsPoint=FALSE
IF "!InputCalc:~%%I,1!" == "." (
SET InputCalcCharIsPoint=TRUE
) ELSE IF "!InputCalc:~%%I,1!" == "," (
SET InputCalcCharIsPoint=TRUE
)
IF "!InputCalcCharIsPoint!" == "TRUE" SET NumbersExpected=TRUE
SET InputCalcCharIsNum=FALSE
IF "!InputCalc:~%%I,1!" == "0" (
SET InputCalcCharIsNum=TRUE
) ELSE (
SET /A InputCalcCharIsNumTest=0
SET /A InputCalcCharIsNumTest=!InputCalc:~%%I,1! >NUL 2>&1
IF "!InputCalcCharIsNumTest!" GTR "0" SET InputCalcCharIsNum=TRUE
)
IF "!InputCalcCharIsNum!" == "TRUE" (
IF "!NumbersExpected!" == "TRUE" (
SET /A InputCalcNumberDigitsPrev=!InputCalcNumberDigitsPrev!+1
)
) ELSE (
IF "!InputCalcCharIsPoint!" == "FALSE" (
SET NumbersExpected=FALSE
IF "!InputCalcNumberDigitsPrev!" GTR "!InputCalcNumberDigits!" SET /A InputCalcNumberDigits=!InputCalcNumberDigitsPrev!
SET /A InputCalcNumberDigitsPrev=0
)
)
)
IF NOT "%~3" == "" SET "%~3=!InputCalcNumberDigits!"
REM -> Stage II: Adjust numbers.
IF !InputCalcNumberDigits! GTR 0 (
SET NewInputCalc=
SET NewInputCalcFloatPart=
SET InputCalcPrevCharWasNum=FALSE
SET RedudantCero=FALSE
FOR /L %%I IN (0,1,%InputCalcLen%) DO (
SET InputCalcCharIsPoint=FALSE
IF "!InputCalc:~%%I,1!" == "." (
SET InputCalcCharIsPoint=TRUE
) ELSE IF "!InputCalc:~%%I,1!" == "," (
SET InputCalcCharIsPoint=TRUE
)
IF "!InputCalcCharIsPoint!" == "TRUE" SET NumbersExpected=TRUE
SET InputCalcCharIsNum=FALSE
IF "!InputCalc:~%%I,1!" == "0" (
IF NOT "!NumbersExpected!" == "TRUE" (
IF NOT "!InputCalcPrevCharWasNum!" == "TRUE" (
SET RedudantCero=TRUE
SET InputCalcCharIsNum=FALSE
)
)
IF NOT "!RedudantCero!" == "TRUE" SET InputCalcCharIsNum=TRUE
) ELSE (
SET /A InputCalcCharIsNumTest=0
SET /A InputCalcCharIsNumTest=!InputCalc:~%%I,1! >NUL 2>&1
IF "!InputCalcCharIsNumTest!" GTR "0" SET InputCalcCharIsNum=TRUE
)
IF NOT "!RedudantCero!" == "TRUE" (
IF "!InputCalcCharIsNum!" == "TRUE" (
IF "!NumbersExpected!" == "TRUE" (
SET "NewInputCalcFloatPart=!NewInputCalcFloatPart!!InputCalc:~%%I,1!"
) ELSE (
SET "NewInputCalc=!NewInputCalc!!InputCalc:~%%I,1!"
)
) ELSE (
IF "!InputCalcCharIsPoint!" == "FALSE" (
SET NumbersExpected=FALSE
IF DEFINED NewInputCalcFloatPart (
SET /A NewInputCalcFloatPartIsCero=!NewInputCalcFloatPart! >NUL 2>&1
IF "!NewInputCalcFloatPartIsCero!" == "0" (
SET InputCalcPrevCharWasNum=TRUE
SET NewInputCalcFloatPart=
)
)
IF DEFINED NewInputCalcFloatPart (
CALL :HandleFloatBuildFloat NewInputCalc NewInputCalcFloatPart InputCalcNumberDigits
SET NewInputCalcFloatPart=
) ELSE IF "!InputCalcPrevCharWasNum!" == "TRUE" (
FOR /L %%I IN (1,1,!InputCalcNumberDigits!) DO SET "NewInputCalc=!NewInputCalc!0"
)
SET "NewInputCalc=!NewInputCalc!!InputCalc:~%%I,1!"
)
)
)
SET RedudantCero=FALSE
SET InputCalcPrevCharWasNum=!InputCalcCharIsNum!
)
CALL :StrLen NewInputCalcLen NewInputCalc
SET /A NewInputCalcLen=!NewInputCalcLen! - 1
FOR /F "tokens=1" %%F IN ("!NewInputCalcLen!") DO SET "%~2=!NewInputCalc:~0,%%F!"
) ELSE (
SET "%~2=%~1"
)
EXIT /B 0
:HandleFloatBuildFloat
CALL :StrLen NewInputCalcFloatPartLen %~2
SET NewInputCalcFloatPartRedudantCero=FALSE
SET /A CurrentNewInputCalcLen=0
IF "!%~2:~0,1!" == "0" (
IF "!%~1!" == "" SET NewInputCalcFloatPartRedudantCero=TRUE
IF "!NewInputCalcFloatPartRedudantCero!" == "FALSE" (
SET NewInputCalcCharIsNumTest=
SET /A NewInputCalcCharIsNumTest=!%~1:~-1! >NUL 2>&1
IF NOT DEFINED NewInputCalcCharIsNumTest SET NewInputCalcFloatPartRedudantCero=TRUE
)
IF "!NewInputCalcFloatPartRedudantCero!" == "FALSE" CALL :StrLen CurrentNewInputCalcLen NewInputCalc
)
:HandleFloatBuildFloatGetLastNonFloat
IF "!CurrentNewInputCalcLen!" GTR "0" (
SET /A CurrentNewInputCalcLen=!CurrentNewInputCalcLen! - 1
FOR /F "tokens=1" %%F IN ("!CurrentNewInputCalcLen!") DO (
IF "!%~1:~%%F,1!" GEQ "0" IF "!%~1:~%%F,1!" LEQ "9" (
SET NewInputCalcFloatPartRedudantCero=FALSE
IF "!%~1:~%%F,1!" == "0" SET NewInputCalcFloatPartRedudantCero=TRUE
GOTO :HandleFloatBuildFloatGetLastNonFloat
)
)
)
FOR /L %%I IN (0,1,!%~3!) DO (
SET SkipCurrentNumber=FALSE
IF "!NewInputCalcFloatPartRedudantCero!" == "TRUE" (
IF "!%~2:~%%I,1!" == "0" (
SET SkipCurrentNumber=TRUE
) ELSE (
SET NewInputCalcFloatPartRedudantCero=FALSE
)
)
IF "!SkipCurrentNumber!" == "FALSE" (
IF "%%I" GTR "!NewInputCalcFloatPartLen!" (
SET "%~1=!%~1!0"
) ELSE (
SET "%~1=!%~1!!%~2:~%%I,1!"
)
)
)
EXIT /B
REM -> CALL :StrLen CountVar StringVar
REM -> Sets CountVar var to the number of characters of the given StringVar
:StrLen
(
IF "%~1" == "" EXIT /B 1
(SET^ tmp=!%~2!)
IF DEFINED tmp (
SET /A "len=1"
FOR %%P IN (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) DO (
IF "!tmp:~%%P,1!" NEQ "" (
SET /A "len+=%%P"
SET "tmp=!tmp:~%%P!"
)
)
) ELSE (
SET /A "len=0"
)
SET /A "%~1=!len!"
EXIT /B 0
)
REM -> Resets
:EndOfBatch
ECHO.
ECHO Exiting batch now...
ECHO.
ping 1.2.3.4 -n 1 -w 200 >NUL
ENDLOCAL
CD /D "%CurrentFolder%"
ping 1.2.3.4 -n 1 -w 100 >NUL
GOTO :Exit
:Exit
Original: 10/2.5
DeFloated: 100/25
Digits: 1
Pre-Calc: 4
Result: 4
Original: 2.5/000010
DeFloated: 25/100
Digits: 1
Pre-Calc: 0.25
Result: 0.25
Original: 10/0.99
DeFloated: 1000/99
Digits: 2
Pre-Calc: 10.10101010101010101010101010101
Result: 10.1
Original: 0.7/0.38
DeFloated: 70/38
Digits: 2
Pre-Calc: 1.8421052631578947368421052631579
Result: 1.84
Original: 15641/3.0810
DeFloated: 156410000/30810
Digits: 4
Pre-Calc: 5076.5985069782538136968516715352
Result: 5076.5
Original: 5 / 0.0003
DeFloated: 50000 / 3
Digits: 4
Pre-Calc: 16666.666666666666666666666666667
Result: 16666.6
Original: 1234*0.00008
DeFloated: 123400000*8
Digits: 5
Pre-Calc: 0.09872
Result: 0.09872
Original: -515415+987165.001
DeFloated: -515415000+987165001
Digits: 3
Pre-Calc: 471750.001
Result: 471750.001
Original: 515415-515414.010
DeFloated: 515415000-515414010
Digits: 3
Pre-Calc: 0.99
Result: 0.99
Original: 515415.09-515414.0001
DeFloated: 5154150900-5154140001
Digits: 4
Invalid number. Numbers are limited to 32-bits of precision.
Pre-Calc: 1.0899
Result: 0..99
Original: 5415.09-5414.0001
DeFloated: 54150900-54140001
Digits: 4
Pre-Calc: 1.0899
Result: 1.0899
Original: 5415.09-15414.0001
DeFloated: 54150900-154140001
Digits: 4
Pre-Calc: -9998.9101
Result: -9998.9101
Original: 300 * 0.04
DeFloated: 30000 * 4
Digits: 2
Pre-Calc: 12
Result: 12
Original: 5414.09-5414.0001
DeFloated: 54140900-54140001
Digits: 4
Pre-Calc: 0.0899
Result: 0.0899
-------------------------------------------------
Result * 105.3
-------------------------------------------------
Original: 0.0899 * 105.3
DeFloated: 899 * 1053000
Digits: 4
Pre-Calc: ?
Result: 9.46647
-------------------------------------------------
Original: 5414.09-5414.0001 * 42
DeFloated: 54140900-54140001 * 420000
Digits: 4
Well multiplication or division do not work together with addition or subtraction atm.
Pre-Calc: What was the question?
Result: