バッチファイルで小数の四則演算をするには?
バッチファイルで小数の四則演算をするには?
c言語を関係はないのですが、久々の質問です。
現在バッチファイルで色々な処理を扱う状況にあります。
その中でawkやperlのように変数、四則演算、ループを使って便利に扱えればよいと考えています。
変数、ループ、分岐、整数の四則演算についてはバッチファイル内で行う方法があるのですが、
小数の四則演算を取り扱う方法がありません。
整数部2桁、小数部2桁程度の固定小数の和、差の計算だけでかまわないので、何とかする方法は
ないのでしょうか?
環境はWindows2000またはWindowsXPですが、
まずはwindows2000を対象でお願いします。
現在バッチファイルで色々な処理を扱う状況にあります。
その中でawkやperlのように変数、四則演算、ループを使って便利に扱えればよいと考えています。
変数、ループ、分岐、整数の四則演算についてはバッチファイル内で行う方法があるのですが、
小数の四則演算を取り扱う方法がありません。
整数部2桁、小数部2桁程度の固定小数の和、差の計算だけでかまわないので、何とかする方法は
ないのでしょうか?
環境はWindows2000またはWindowsXPですが、
まずはwindows2000を対象でお願いします。
Re:バッチファイルで小数の四則演算をするには?
>Mistさん
回答ありがとうございます。
そのようにして計算できても最後の100で割るときに小数部が切られてしまうのでその方法は使えませんでした。
いい忘れていましたが、最終的にほしい結果は小数部が入った文字列です。
rem Aは12.34の100倍で考えている
set A=1234
rem Bには12.34を入れたいがBは12が入ってしまう
set /A B=A/100
rem ここから先12.34を使っていく
回答ありがとうございます。
そのようにして計算できても最後の100で割るときに小数部が切られてしまうのでその方法は使えませんでした。
いい忘れていましたが、最終的にほしい結果は小数部が入った文字列です。
rem Aは12.34の100倍で考えている
set A=1234
rem Bには12.34を入れたいがBは12が入ってしまう
set /A B=A/100
rem ここから先12.34を使っていく
Re:バッチファイルで小数の四則演算をするには?
rem 計算結果が1234=12.34だったとする
set /a A=1234
set /a B=A/100
set /a C=A%%100
set D=%B%.%C%
文字列でいいならこれでOK(XP動作確認済み)
set /a A=1234
set /a B=A/100
set /a C=A%%100
set D=%B%.%C%
文字列でいいならこれでOK(XP動作確認済み)
Re:バッチファイルで小数の四則演算をするには?
素直に小数点演算するコンソールアプリを作ったほうが簡単のような・・・。
あるいは、Windows2000だったらWSHが使えるのでWSHで組むとか。
あるいは、Windows2000だったらWSHが使えるのでWSHで組むとか。
Re:バッチファイルで小数の四則演算をするには?
set /a A=1209
set /a B=A/100
set /a C=A%%100
if %C% LSS 10 (set D=%B%.0%C%) else (set D=%B%.%C%)
echo %D%
修正しました。
これでも末のゼロ(12.00とか12.10)は残るけど、少数2位までの数値保証と考えればこれでもいいのかな?
変換後の使い道が不明なのでここまでにしておきます。
12.00を12と表現するのであればさらにif文追加してください。
> pieさん
ご指摘ありがとうございました。
set /a B=A/100
set /a C=A%%100
if %C% LSS 10 (set D=%B%.0%C%) else (set D=%B%.%C%)
echo %D%
修正しました。
これでも末のゼロ(12.00とか12.10)は残るけど、少数2位までの数値保証と考えればこれでもいいのかな?
変換後の使い道が不明なのでここまでにしておきます。
12.00を12と表現するのであればさらにif文追加してください。
> pieさん
ご指摘ありがとうございました。
Re:バッチファイルで小数の四則演算をするには?
>皆様
コメント&回答ありがとうございます。
>変換後の使い道が不明なのでここまでにしておきます。
gmt(コマンドラインで地図を描くソフト)を使うためにいちいち同じ値を手で入力すると間違えそうなので
自動化を考えています。
表現については12.00でも12でも問題はありません。
演算&出力はMistさんの方法で出来ると思いますが、ユーザーからの入力値を100倍するという問題が残っています。
引き続いて入力の方法を教えてほしいです。
コメント&回答ありがとうございます。
>変換後の使い道が不明なのでここまでにしておきます。
gmt(コマンドラインで地図を描くソフト)を使うためにいちいち同じ値を手で入力すると間違えそうなので
自動化を考えています。
表現については12.00でも12でも問題はありません。
演算&出力はMistさんの方法で出来ると思いますが、ユーザーからの入力値を100倍するという問題が残っています。
引き続いて入力の方法を教えてほしいです。
Re:バッチファイルで小数の四則演算をするには?
ユーザには小数点付きの状態で入力させたいってことですか?
仕様として、「値は小数点つけずに入力してください。(12.34→1234,12.00→1200)」とするのは駄目ですか?
仕様として、「値は小数点つけずに入力してください。(12.34→1234,12.00→1200)」とするのは駄目ですか?
Re:バッチファイルで小数の四則演算をするには?
>仕様として、「値は小数点つけずに入力してください。(12.34→1234,12.00→1200)」とするのは駄目ですか?
それは可能です。
(小数入力が無理ならそうしようと思っていました。)
ただ、バッチ処理でどこまでの処理が出来るかどうかが、まだ良くわかっていないので質問をしました。
かなり難しいor不可能なのでしょうか?
それは可能です。
(小数入力が無理ならそうしようと思っていました。)
ただ、バッチ処理でどこまでの処理が出来るかどうかが、まだ良くわかっていないので質問をしました。
かなり難しいor不可能なのでしょうか?
Re:バッチファイルで小数の四則演算をするには?
入力は出来るんですが整数への変換が成功しません。
下のようなバッチ組んでみましたが、小数部分の切り出しで失敗します。
もうちょっと考えてみます。
echo off
set /p INP="値入力(xx.xx形式) >"
echo ret1=%INP%
set /a SEI=%INP:~0,2%
set /a SHOU=%INP:~2,2%
echo SEI=%SEI%
echo SHOU=%SHOU%
set /a A=%SEI%*100+%SHOU%
echo A=%A%
set /a B=A/100
set /a C=A%%100
if %C% LSS 10 (set D=%B%.0%C%) else (set D=%B%.%C%)
echo %D%
echo on
下のようなバッチ組んでみましたが、小数部分の切り出しで失敗します。
もうちょっと考えてみます。
echo off
set /p INP="値入力(xx.xx形式) >"
echo ret1=%INP%
set /a SEI=%INP:~0,2%
set /a SHOU=%INP:~2,2%
echo SEI=%SEI%
echo SHOU=%SHOU%
set /a A=%SEI%*100+%SHOU%
echo A=%A%
set /a B=A/100
set /a C=A%%100
if %C% LSS 10 (set D=%B%.0%C%) else (set D=%B%.%C%)
echo %D%
echo on
Re:バッチファイルで小数の四則演算をするには?
改良版。
一応動作する、けど12.03とか入力するとSHOU=03になるので8進数扱いになる。
なので12.09と入力するとSHOU=09になって8進数でありえない数値になってエラーになる。
echo off
set /p INP="値入力(xx.xx形式) >"
echo ret1=%INP%
set /a SEI=%INP:~0,2%
set /a SHOU=%INP:~3,2%
echo SEI=%SEI%
echo SHOU=%SHOU%
set /a A=%SEI%*100+%SHOU%
echo A=%A%
set /a B=A/100
set /a C=A%%100
if %C% LSS 10 (set D=%B%.0%C%) else (set D=%B%.%C%)
echo %D%
echo on
一応動作する、けど12.03とか入力するとSHOU=03になるので8進数扱いになる。
なので12.09と入力するとSHOU=09になって8進数でありえない数値になってエラーになる。
echo off
set /p INP="値入力(xx.xx形式) >"
echo ret1=%INP%
set /a SEI=%INP:~0,2%
set /a SHOU=%INP:~3,2%
echo SEI=%SEI%
echo SHOU=%SHOU%
set /a A=%SEI%*100+%SHOU%
echo A=%A%
set /a B=A/100
set /a C=A%%100
if %C% LSS 10 (set D=%B%.0%C%) else (set D=%B%.%C%)
echo %D%
echo on
Re:バッチファイルで小数の四則演算をするには?
無理やり感全開だけど希望通りの動作すると思います。
私がテストした範囲では問題なし、さっきみたいにバグってたらごめんなさい。
ただ、「整数2桁.小数2桁」で入力してもらうしかないです。
8とかは08.00という感じで。
@echo off
set /p INP="値入力(xx.xx形式) >"
echo ret1=%INP%
set /a SEI2=%INP:~0,1%
set /a SEI1=%INP:~1,1%
set /a SHOU1=%INP:~3,1%
set /a SHOU2=%INP:~4,1%
echo SEI2=%SEI2%
echo SEI1=%SEI1%
echo SHOU=%SHOU1%
echo SHOU=%SHOU2%
set /a A=%SEI2%*1000+%SEI1%*100+%SHOU1%*10+%SHOU2%
echo A=%A%
set /a B=A/100
set /a C=A%%100
if %C% LSS 10 (set D=%B%.0%C%) else (set D=%B%.%C%)
echo %D%
@echo on
私がテストした範囲では問題なし、さっきみたいにバグってたらごめんなさい。
ただ、「整数2桁.小数2桁」で入力してもらうしかないです。
8とかは08.00という感じで。
@echo off
set /p INP="値入力(xx.xx形式) >"
echo ret1=%INP%
set /a SEI2=%INP:~0,1%
set /a SEI1=%INP:~1,1%
set /a SHOU1=%INP:~3,1%
set /a SHOU2=%INP:~4,1%
echo SEI2=%SEI2%
echo SEI1=%SEI1%
echo SHOU=%SHOU1%
echo SHOU=%SHOU2%
set /a A=%SEI2%*1000+%SEI1%*100+%SHOU1%*10+%SHOU2%
echo A=%A%
set /a B=A/100
set /a C=A%%100
if %C% LSS 10 (set D=%B%.0%C%) else (set D=%B%.%C%)
echo %D%
@echo on
Re:バッチファイルで小数の四則演算をするには?
>Mistさん
完成版?ありがとうございます。
まだ作っていませんが、これで作れると思います。
ワイルドカードがあるので文字列処理が比較的得意と思っていましたが
バッチ処理は思ったより出来る機能が少なかった事が収穫です。
ありがとうございました
完成版?ありがとうございます。
まだ作っていませんが、これで作れると思います。
ワイルドカードがあるので文字列処理が比較的得意と思っていましたが
バッチ処理は思ったより出来る機能が少なかった事が収穫です。
ありがとうございました