Floating point division in a batch file

后端 未结 8 860
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-27 21:48

I need to do a floating-point division in a dos batch.

I didn\'t find a way to do it. Something like this :

SET /A Res=10/3

returns

相关标签:
8条回答
  • 2020-11-27 22:21

    Since nowadays PowerShell is present on almost all machines, I would let PowerShell do the math and return the result to the batch.

    Example:

    set divident=10
    set divisor=3
    for /f "delims=" %%a in ('powershell -Command %divident%/%divisor%') do set result=%%a
    @echo %result%
    

    Explanation:

    Input variables: Use set variables to define divident and divisor.

    Calling powershell and assign result to a batch variable: for /f "delims=" %%a in ('powershell -Command ...) do set result=%%a (you may also check here: How to put a single PowerShell output string into a cmd variable?)

    Note the above code will only work with integer input variables. To support floating point input variables, we need to send the variables as strings inside quotations ("%variable%") and convert the strings within PowerShell back to Double, otherwise batch would interpret the commas as delimiters and PowerShell could not interpret the numbers.

    Example:

    set divident=10,5
    set divisor=3,4
    for /f "delims=" %%a in ('powershell -Command [convert]::ToDouble^(\"%divident%\"^)
                                            /[convert]::ToDouble^(\"%divisor%\"^)') do set result=%%a
    @echo %result%
    

    Explanation:

    Note in PowerShell you would do this like [convert]::ToDouble("10,5")/[convert]::ToDouble("3,5"). However in batch we need to escape the quotes using backslash, and we also need to add a "^" sign before and after the quoted parts: [convert]::ToDouble^("%divident%"^)/[convert]::ToDouble^("%divisor%"^)

    0 讨论(0)
  • 2020-11-27 22:21

    If you're running in a command shell on Windows (rather than DOS), you can use VBScript to evaluate complex expressions including floating point math for you.

    I have written a small helper library you can call to do this.

    EvalBat Library on GitHub

    0 讨论(0)
提交回复
热议问题