gpt4 book ai didi

delphi - 将 EXIF 曝光时间计算为分数 (Delphi)

转载 作者:行者123 更新时间:2023-12-03 15:22:47 27 4
gpt4 key购买 nike

我试图将 EXIF 曝光时间显示为几分之一秒,但没有得到预期的结果,可能是一个小错误。

我发现两个例程可以进行计算,但都会带来不同且错误的结果。

我遇到问题的值是:“0.0806451612903226”值的类型为扩展。

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;

最佳答案

1/12 实际上并不是该值的正确结果。

也许他们有某种“对齐”查找表,即该值最接近增量值列表中的 1/12?

关于delphi - 将 EXIF 曝光时间计算为分数 (Delphi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996833/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com