这看起来不像Inno Setup问题,但实际上与其有用的Pascal脚本有关.
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
我不能将Height和Width声明为Extended,Single或Double,因为它们在大多数情况下作为Integer返回,所以我需要将这两个Integers转换为两个Singles.
做完之后:
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文档.
请注意,格式使用特定于区域设置的数字格式(特别是小数分隔符).
如果你真的需要截断,你需要自己实现它:
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使用特定于语言环境的小数分隔符,即并不总是..
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。