実数型の変数に入っている数値の小数点以下の数値が何桁か調べれますか?
0.01=2 のうような感じでやりたいです。よろしくお願いします!!
> 0.01=2 のうような感じでやりたいです。
これは、たとえば 0.010000000001 のときは12でいいんですか?
FloatToStr() で文字列になおしてから、小数点以下の字数を数える、とか。
function getketasu(v:実数型):integer;
var
i:integer;
s:string;
begin
s:=FloatToStr(v);
i:=ansipos('.',s)
result:=length(rightstr(s,length(s)-i))
end;
未確認です
数字がずれる場合はresultのところに+1やら-1やらしてください
> FloatToStr() で文字列になおしてから、小数点以下の字数を数える、とか。
これはダメですね。たとえば 2E-100 の場合は100ですけど求められません。
1.01E-100 だと求める答えは102です。うーむ。
小数点以下の実数の有効数字が現れるまでの 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;
0.01 → 2
2E-100 → 100
2E100 → 0
2.01E1 → 1
2.01E-1 → 3
2.01E-100 → 102
全部の場合を求めるのは面倒だね。FloatToDecimal関数つかうとどうなるの?
面倒あらへんで。これ全部いけるんチャウか?
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;
> 面倒あらへんで。これ全部いけるんチャウか?
確認しました。なるほど、こういう場合は FloatToDecimal() は便利ですね。
jokさん、う〜むさん、るるとん@Kさん
詳しく、分かりやすい回答わりがとうございますぅ;;
やってみてうまく行きました!!
サンプルソースまでいただいてしまって感謝感激です!!
ありがとうございました!!
ツイート | ![]() |