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)
我不能宣布Height与Width作为Extended , Single或Double因为他们正在返回为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呢?
提前致谢.
如果四舍五入是可以接受的,一个简单的解决方案是使用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 版本是唯一的版本。
| 归档时间: |
|
| 查看次数: |
1381 次 |
| 最近记录: |