gpt4 book ai didi

floating-point - 在 Inno Setup Pascal Script 中将 float 舍入/截断为 N 个小数位

转载 作者:行者123 更新时间:2023-12-03 17:07:36 26 4
gpt4 key购买 nike

这看起来不像 Inno Setup 问题,但实际上与其有用的 Pascal Script 相关。

我写了一个代码来进行浮点计算。

Height, DivisionOfHeightWidth, Width: Integer;

Height := 1080;
Width := 1920;

DivisionOfHeightWidth := Width / Height;
Log('The Division Of Height and Width: ' + IntToStr(DivisionOfHeightWidth));

编译器日志给出输出:
The Division Of Height and Width: 1

我希望这个编译器输出返回这个:
The Division Of Height and Width: 1.77

我不能申报 HeightWidthExtended , SingleDouble因为他们返回 Integer在大多数情况下,我需要将这两个整数转换为两个单数。

做完之后:

Height, Width: Integer;
HeightF, WidthF, DivisionOfHeightWidthF: Single;

Height := 1080;
Width := 1920;

HeightF := Height;
WidthF := Width;
DivisionOfHeightWidthF := WidthF / HeightF;
Log('The Division Of Height and Width: ' + FloatToStr(DivisionOfHeightWidthF));

编译器日志现在给出输出:
The Division Of Height and Width: 1.777777791023

但是我怎样才能得到这个输出 1.77 ? (不是 1.78 通过四舍五入)
我的意思是我该如何解决这个问题 1.777777791023保留两位小数,如 1.77 ?

如果四舍五入,如 1.77这是不可能的,我怎么能像 1.78 那样圆呢? ?

提前致谢。

最佳答案

如果四舍五入是可以接受的,一个简单的解决方案是使用 Format function :

var
Height, Width: Integer;
DivisionOfHeightWidthF: Single;
begin
...
DivisionOfHeightWidthF := Single(Width) / Height;
Log(Format('The Division Of Height and Width: %.2f', [DivisionOfHeightWidthF]));
end;
有关格式字符串的详细信息,请参阅 Format function 的 Delphi 文档。 .
请注意 Format使用特定于语言环境的数字格式(特别是十进制分隔符)。

如果您确实需要截断,则需要自己实现,例如:
var
Height, Width: Integer;
DivisionOfHeightWidthF: Single;
S: string;
P: Integer;
begin
...
DivisionOfHeightWidthF := Single(Width) / Height;
S := FloatToStr(DivisionOfHeightWidthF);
P := Pos('.', S);
if P < Length(S) - 2 then
begin
SetLength(S, P + 2);
end;
Log(S);
end;

以上仅适用于 Unicode Inno Setup,如 Ansi 版本 FloatToStr使用特定于语言环境的十进制分隔符,即不总是 . .在当前的 Inno Setup 6 中,Unicode 版本是唯一的版本。

关于floating-point - 在 Inno Setup Pascal Script 中将 float 舍入/截断为 N 个小数位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966635/

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