Stringgridへの浮動少数の表示方法?を教えてください。

解決


超初心者  2010-08-19 02:49:54  No: 39000

お世話になります。
どうしても分からないので教えてください。

ズラッと一行の、いわばノベタンのデータを固定のレコード長で区切って、
Stringgridに表示させるようにしています。
《下記》
    StringGrid1.cells[1,l] := Copy(Memo2.Lines[l],1,5);
    StringGrid1.cells[2,l] := Copy(Memo2.Lines[l],6,20);
    StringGrid1.Cells[3,l] := Copy(Memo2.Lines[l],26,11);

例えば上記の3行目の11桁が、9桁が整数で2桁が小数点以下2位の場合、
どのようなコードになるのでしょうか?

素人で本当にすみません。
どうぞ宜しくお願いいたします。


なな  2010-08-19 05:14:02  No: 39001

何を言ってるのかわからないけど、ただの文字列操作だから、
小数点だのなんだのっていう概念はないよ。

なにがしたいの?


igy  2010-08-19 05:42:36  No: 39002

>例えば上記の3行目の11桁が、9桁が整数で2桁が小数点以下2位の場合、
>どのようなコードになるのでしょうか?

StringGrid1.Cells[3,l]に小数点を付けて格納したいのですか?
それとも、11桁のまま格納して、StringGridに表示するときのみ、小数点を付けたいのですか?


Quest  2010-08-19 10:20:02  No: 39003

頭に0があるのかスペースがあるのか等、何も考えずにベタにやるなら
var
  s: string;
begin
  ・
  ・
  s := Copy(Memo2.Lines[l],26,11);
  Insert('.', s, 10);
  StringGrid1.Cells[3,l] := s;
  ・
  ・
end;


TS  2010-08-19 18:01:09  No: 39004

>例えば上記の3行目の11桁が、9桁が整数で2桁が小数点以下2位の場合、
カンマが無いけど数値の格納位置は分かっていると言うigyさん、Questさんと
同じ解釈で文字を整数部と少数部に分けて数値化し後は下記ホームページ
を参照されてFormatを使って好きな様に表示して下さい。

http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00149.htm


超初心者  2010-08-20 00:43:50  No: 39005

《補足》
すみません、記述時慌てていたので説明が不十分でした。
皆様早々のご回答を有難う御座います。
本文補足させていただきます。

igyさま、
「StringGrid1.Cells[3,l]に小数点を付けて格納したい」のです。

0000000001234  ⇒  000000012.34

以下のように記述したのですが、
では
l= Integer;を浮動少数型(singleやdouble、currencyも試しました。)
にすればいいのではないかと考えましたが、

for l :=0 to Memo1.Lines.Count - 1 do
の行でコンパイルエラーになってしまいます。
このエラーは何故なのでしょうか?
for l :=0 が整数だからですか?

度々で恐縮です。
なにとぞ宜しくお願いいたします。

−−−−−−−−−−−−−−−−−−−−−−−−
var
  l: INTEGER;
begin
  StringGrid1.ROWcount := Memo2.Lines.Count - 1;
  for l :=0 to Memo2.Lines.Count - 1 do
  begin
    StringGrid1.cells[1,l] := Copy(Memo2.Lines[l],1,5);
    StringGrid1.cells[2,l] := Copy(Memo2.Lines[l],6,20);
    StringGrid1.Cells[3,l] := Copy(Memo2.Lines[l],26,11);



  end;
end;


HOta  2010-08-20 01:26:15  No: 39006

TStringGridのcellsは文字型です。
単純に文字列の右から2番目の前に[.]を入れればその形になります。

エラーの件は、単純にMemo1とMemo2の間違いでは?
シンタックスは問題ないように見えます。


通りすがり  2010-08-20 01:45:33  No: 39007

こうですか?

procedure TForm1.Button1Click(Sender: TObject);
var
  l: Integer;
begin
  Memo2.Lines.Clear;
  Memo2.Lines.Add('123456789012345678901234567890123456');
  Memo2.Lines.Add('123451234567890123456789000000001234');

  StringGrid1.RowCount := Memo2.Lines.Count; //-1;

  for l:=0 to Memo2.Lines.Count - 1 do
  begin
    StringGrid1.Cells[1,l] := Copy(Memo2.Lines[l],1,5);
    StringGrid1.Cells[2,l] := Copy(Memo2.Lines[l],6,20);
  //StringGrid1.Cells[3,l] := Copy(Memo2.Lines[l],26,11);
    StringGrid1.Cells[3,l] := Copy(Memo2.Lines[l],26,9)
                             +'.'
                             +Copy(Memo2.Lines[l],35,2);
  end;
end;


超初心者  2010-08-25 22:09:26  No: 39008

通りすがり様、有難う御座いました。
表現したかった結果はこの通りです。

皆様、ご回答戴き誠にどうも有難う御座いました。


HOta  2010-08-25 22:14:30  No: 39009

エラーはどうなったの?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加