小数点以下が何桁か調べたいです。

解決


えり  2004-04-06 18:32:34  No: 8242

実数型の変数に入っている数値の小数点以下の数値が何桁か調べれますか?
  
  0.01=2  のうような感じでやりたいです。よろしくお願いします!!


jok  2004-04-06 19:04:32  No: 8243

> 0.01=2  のうような感じでやりたいです。

これは、たとえば 0.010000000001 のときは12でいいんですか?
FloatToStr() で文字列になおしてから、小数点以下の字数を数える、とか。


るるとん@K  2004-04-06 19:37:14  No: 8244

function getketasu(v:実数型):integer;
var
i:integer;
s:string;
begin
s:=FloatToStr(v);
i:=ansipos('.',s)
result:=length(rightstr(s,length(s)-i))
end;


るるとん@K  2004-04-06 19:38:46  No: 8245

未確認です
数字がずれる場合はresultのところに+1やら-1やらしてください


jok  2004-04-06 19:45:19  No: 8246

> FloatToStr() で文字列になおしてから、小数点以下の字数を数える、とか。

これはダメですね。たとえば  2E-100 の場合は100ですけど求められません。
1.01E-100 だと求める答えは102です。うーむ。


う〜む  2004-04-06 20:15:11  No: 8247

小数点以下の実数の有効数字が現れるまでの 0 の個数チャウかな〜?
例えば、
0.010000000001 ⇒ 2
0.000123004567 ⇒ 4
0.000008900012 ⇒ 6

それとも、小数点以下の数字の桁数かいな〜?
0.010000000001 ⇒ 12
0.000123004567 ⇒ 12
0.000008900012 ⇒ 12

ま、どちらでもエエけど、こら FloatToDecimal関数やな。 ヘルプで調べてや〜

procedure TForm1.Button1Click(Sender: TObject);
var
  DecVal: TFloatRec;
  Value : Extended;
begin
  Value := 2E-100;
  FloatToDecimal(DecVal, Value, fvExtended, 18, 9999);
  Edit1.Text := IntToStr(DecVal.Exponent);
  Edit2.Text := DecVal.Digits;
end;


jok  2004-04-06 20:51:22  No: 8248

0.01 → 2
2E-100 → 100
2E100 → 0
2.01E1 → 1
2.01E-1 → 3
2.01E-100 → 102

全部の場合を求めるのは面倒だね。FloatToDecimal関数つかうとどうなるの?


う〜〜む  2004-04-06 21:30:47  No: 8249

面倒あらへんで。これ全部いけるんチャウか?

procedure TForm1.Button1Click(Sender: TObject);
var
  DecVal: TFloatRec;
  Value : extended;
  Ketasu: Integer;
begin
  Value := 0.01;   // → 2
  Value := 2E-100; // → 100
  Value := 2E100;  // → 0
  Value := 2.01E1; // → 1
  Value := 2.01E-1; // → 3
  Value := 2.01E-100; //  → 102
  Value := 0.010000000001; //  → 12
  FloatToDecimal(DecVal, Value, fvExtended, 18, 9999);
  Ketasu := StrLen(DecVal.Digits) - DecVal.Exponent;
  if Ketasu > 0 then begin
    Edit1.Text := '小数点以下の桁数〓'+ IntToStr(StrLen(DecVal.Digits) - DecVal.Exponent);
  end else begin
    Edit1.Text := '小数点以下あらへんで';
  end;


jok  2004-04-06 22:17:04  No: 8250

> 面倒あらへんで。これ全部いけるんチャウか?

確認しました。なるほど、こういう場合は FloatToDecimal() は便利ですね。


えり  2004-04-06 23:02:54  No: 8251

jokさん、う〜むさん、るるとん@Kさん

  詳しく、分かりやすい回答わりがとうございますぅ;;
  やってみてうまく行きました!!
  
  サンプルソースまでいただいてしまって感謝感激です!!
  ありがとうございました!!


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

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






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