在Inno Setup Pascal脚本中舍入/截断浮点数到N个小数位

GTA*_*ver 5 floating-point integer inno-setup pascalscript

这看起来不像Inno Setup问题,但实际上与其有用的Pascal脚本有关.

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

Height, DivisionOfHeightWidth, Width: Integer;

Height := 1080;
Width := 1920;

DivisionOfHeightWidth := Width / Height;
Log('The Division Of Height and Width: ' + IntToStr(DivisionOfHeightWidth));
Run Code Online (Sandbox Code Playgroud)

编译器日志给出输出:

The Division Of Height and Width: 1
Run Code Online (Sandbox Code Playgroud)

我希望这个编译器输出改为:

The Division Of Height and Width: 1.77
Run Code Online (Sandbox Code Playgroud)

我不能宣布HeightWidth作为Extended , 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));
Run Code Online (Sandbox Code Playgroud)

编译器日志现在给出输出:

The Division Of Height and Width: 1.777777791023
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能得到这个输出1.77(不是1.78通过舍入) 我的意思是我怎么能把它舍入1.777777791023到两个小数位1.77呢?

如果舍入它1.77是不可能的,我怎么能绕它1.78呢?

提前致谢.

Mar*_*ryl 6

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

var
  Height, Width: Integer;
  DivisionOfHeightWidthF: Single;
begin
  ...
  DivisionOfHeightWidthF := Single(Width) / Height;
  Log(Format('The Division Of Height and Width: %.2f', [DivisionOfHeightWidthF]));
end;
Run Code Online (Sandbox Code Playgroud)

有关格式字符串的详细信息,请参阅Format函数的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;
Run Code Online (Sandbox Code Playgroud)

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