これは古い質問であることは知っていますが、同様の質問で独自のスクリプトを作成しました。おそらく、私の答えは、同じ/類似の質問を持つ誰かを助けることができます. 私自身の質問は、「バッチ スクリプトで浮動小数点数を使用するにはどうすればよいですか?」というものでした。StackOverflow に関する他の個人的な質問について熟考し、調査した結果、次のサンプル スクリプトを思いつきました。浮動小数点数を、スクリプトの残りの部分で使用できる 2 つの変数の形式の分数にほとんど変換します。同様の質問に対するこの回答https://stackoverflow.com/a/20531384/2464491と併せて使用できます。
@echo off
setlocal EnableExtensions
setlocal EnableDelayedExpansion
REM This is how I do a block comment.
goto SOF
========Begin Comment========
Title: deciTest.bat
This batch script checks to see if the number inputed is an interger or a floating point number.
If it is a floating point number, it determines to how many decimal places up to 4096 places.
It then informes the user of how to use the floating point number in arithmatic equations.
Of course, if you include within your script, you can simply call upon the !intOut! and
!multiplier! variables elswhere in your script.
=========End Comment=========
:SOF
REM Check to see if the user supplied a number.
if "%1"=="" (
REM If not, tell them how to use the file.
echo Usage: deciTest.bat [number]
echo.
echo [number] The number to check. Enter either an integer
echo or a floating point number.
echo.
goto eof
)
REM Assign the user input to variable decNum
set decNum=%1
REM Plop the number into a file
echo !decNum!>decNum.tmp
REM Check to see if there is a decimal point
findstr /c:"." decNum.tmp >null
REM If it is found, the number is a floating point number
REM So lets make it so we can use it.
if %errorlevel%==0 (
REM Separate our Characteristic (before the .) and Mantissa (after the .)
for /f "tokens=1-18* delims=." %%a in (decNum.tmp) do (
REM Count the length of our Mantissa (How may decimal places?)
set "s=%%b"
set "s=!s!#"
set "decPlaces=0"
for %%P in (4096 2048 1024 512 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "decPlaces+=%%P"
set "s=!S:~%%P!"
)
)
REM Inform the user of our findings.
echo %%a.%%b is a floating point number with !decPlaces! decimal places
call :Integrate
echo.
REM Create the variable !intOUt! for use elswhere in the code
set /a intOut=%%a*!multiple!+%%b
REM Tell the user how to use this particular floating number
echo Your batch file can use !intOut! in your arithmatic equations.
echo Simply divide your result by !multiple!.
)
) else (
REM If it aint floatin', it's an integer
echo %1 is an integer
)
goto eof
:Integrate REM Create the !multiple! variable to be used elsewhere in the script
set count=!decPlaces!
set multiple=1
:startloop
set /a multiple*=10
set /a count-=1
if not !count!==0 goto startloop
:eof
このコードは、浮動小数点数の処理方法を示しています。基本的に、浮動小数点数を分数に変換します (!intOut!/!multipler!)。算数を少し調整すると。!intOut! で乗算し、!intOut!/!multiplier! を送信します。ただし、ここにあるサンプルスクリプトに必要な小数点以下の桁数は多くあります: https://stackoverflow.com/a/20531384/2464491
これが、バッチ スクリプトで浮動小数点数を操作しようとしたときに同じ問題に遭遇した人に役立つことを願っています。確かに、そのような数値で動作するようには設計されていませんが、いつでも問題を回避する方法をスクリプト化できます。