EXIFの露出時間を秒単位で表示しようとしていますが、期待どおりの結果が得られません。おそらく小さな間違いです。
計算を行う2つのルーチンを見つけましたが、どちらも異なる結果と間違った結果をもたらします。
私が問題を抱えている値は次のとおりです。"0.0806451612903226"値はタイプExtendedです。
DecimalToFractStrは結果として「16129/200000」を与え、DecToFracは結果として「5/62」を与えます
誰もがそれを取得しているので、期待される結果は「1/12」になるはずです(トリックは何ですか)。エクスプローラーで画像を右クリックして詳細を表示すると、この値が表示されます。アプリケーションで取得するにはどうすればよいですか?誰かがここで私を助けてくれることを願っています。
よろしくロイMクレバー
解決しました!いくつかのテストの後、私はそれを理解しました。DecToFracの結果を使用して、左側の結果で整数で除算します。5 div 5 = 1/62 div 5 = 12なので、必要な結果1/12が残ります。
ご意見ありがとうございます。
よろしくロイMクレバー
procedure DecimalToFract(value: double; AllowedDecimals: integer; var num, den:
integer);
var
d, i: integer;
ex: boolean;
begin
d := Trunc(power(10, AllowedDecimals));
num := Trunc(value * d);
den := d;
repeat
ex := true;
for i := 10 downto 2 do
if ((num mod i) = 0) and ((den mod i) = 0) then
begin
num := num div i;
den := den div i;
ex := false;
end;
until ex;
end;
function DecimalToFractStr(value: double): string;
var
num, den: integer;
begin
DecimalToFract(value, 6, num, den);
if den = 1 then
result := inttostr(num)
else
result := inttostr(num) + '/' + inttostr(den);
end;
function Dec2Frac(f: Double): String;
var
df: Double;
lUpperPart: Integer;
lLowerPart: Integer;
begin
lUpperPart := 1;
lLowerPart := 1;
df := lUpperPart / lLowerPart;
While (df <> f) do
begin
If (df < f) Then
lUpperPart := lUpperPart + 1
Else
begin
lLowerPart := lLowerPart + 1;
lUpperPart := Trunc(f * lLowerPart);
end;
df := lUpperPart / lLowerPart;
end;
if lLowerPart = 1 then
result := IntToStr(lUpperPart)
else
result := IntToStr(lUpperPart) + '/' + IntToStr(lLowerPart);
end;