tmp := 1500 * 400 * 4786 * 47 / 1000000);
上記のようなコーディングをすると
「数値演算のオーバーフロー」というエラーがでます。
回避方法を教えていただけませんでしょうか?
Shortint -128 〜 127 符号付き8ビット
Smallint -32768 〜 32767 符号付き16ビット
Longint -2147483647 〜 2147483647 符号付き32ビット
tmp をLongintで宣言するか、floatにすればいけないかな?
演算は左側から順番に実行されます.
計算していくと,整数として実行され,整数値の範囲を超えるために発生します.
単に数値を書いた場合は,32bitと解釈されます.
明示的に,数値が浮動小数点であることを指示するか.Int64等の変数を定義して,そこに代入すればOKですが.
tmpが浮動小数点ですよね( / の演算をしているから).
もっとも,このままでも他のエラーが発生しますけど (^^
procedure TForm1.Button1Click(Sender: TObject);
var
tmp : Double;
begin
tmp := 1500.0 * 400.0 * 4786.0 * 47.0 / 1000000);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a : Int64;
b : Int64;
c : Int64;
d : Int64;
Tmp : Double;
begin
a := 1500;
b := 400;
c := 4786;
d := 47;
tmp :=a * b * c * d / 1000000; //)と右の不正な文字を削除しました
end;
>tmpが浮動小数点ですよね( / の演算をしているから).
整数の除算は div ですから.
Mr.XRAYさん、多分さん早速のご回答ありがとうございます。
ご教授頂きました通りトライしましたところ、解決いたしました。
助かりました。
今後とも宜しくお願い致します。
ツイート | ![]() |