gpt4 book ai didi

delphi - 在Delphi中,浮点类型最大值的关键字是什么?

转载 作者:行者123 更新时间:2023-12-03 15:00:55 24 4
gpt4 key购买 nike

注意:此问题已被编辑,因为我的问题变得完全不同。您将在 MBo's answer 中找到浮点类型最大值的关键字是什么? 问题的直接答案。 - 使用 System.Math 的常量。

Delphi 提供了多种浮点值类型。有单、双和扩展三种。

上周我查了一下最大浮点值的关键字是什么,发现了这个:http://www.delphibasics.co.uk/RTL.asp?Name=Infinity

var
float1, float2 : single;
begin
float1 := Infinity;
float2 := 23;

ShowMessage('float1 = '+FloatToStr(float1));
ShowMessage('float2 = '+FloatToStr(float2));
ShowMessage('float1 - float2 = '+FloatToStr(float1 - float2));
ShowMessage('-float1 = '+FloatToStr(-float1));
end;

假设的输出

float1 = INF
float2 = 23
float1 - float2 = INF
-float1 = -INF

我有一个带有组件的表单。该组件有几个属性。如果我使用属性编辑器将 Infinity 作为浮点属性的值,则会收到错误消息,指出它是无效的浮点值。 INF 也是如此。

然后我在 MaxValue 字段中输入 9.9E308。它转化为 INF

Form Attributes

对此感到相当高兴,我保存了表格并继续我的工作。当天晚些时候,我编译了该表单,并成功测试该表单可以保存值 1E308

第二天...

Error on restarting IDE

在记事本中打开 .dfm 文件会得到以下结果:

object gridDoubleEditor: TdgmrGridDoubleEdit
Tag = 0
WantKeyLeftRight = False
WantKeyUpDown = False
WantKeyHomeEnd = False
WantKeyPriorNext = False
EmptyString = '--'
EmptyValue = -1E300
MinValue = -1E300
MaxValue = INF
NumberOfDecimals = 2
Alignment = taRightJustify
Left = 336
Top = 208
end

为什么它自动将9.9E308更改为INF,编译成功,保存成功,但加载失败?这是我的IDE的错误吗?我在 Windows 7 上使用 Embarcadero® Delphi® XE5 版本 19.0.14356.6604,32 位。

最佳答案

System.Math 单元包含 Infinity 常量来表示 IEEE754 Inf 伪值(1.0/0.0)。该单元中还有很多 MaxDouble、MaxExtended 等常量(参见 Variables section here )。这个简短的测试可以根据需要进行,因此我怀疑您的组件可能具有某种范围检查或具有不理解未知标识符的属性编辑器。

  TTest = class(TComponent)
private
FValue: Double;
procedure SetValue(const Value: Double);
public
property Value: Double read FValue write SetValue;
end;


procedure TForm1.Button26Click(Sender: TObject);
begin
with TTest.Create(Self) do try
Value := Infinity;
Caption := FloatToStr(Value);
finally
Free;
end;
end;

附注您是否需要使用 Infinity 作为字段值,或者只是确保字段值 > -1E300?

P.P.S.为什么你仍然使用 INF,而不是 Infinity?顺便说一句,我发现一个具有 float 发布属性的组件 - 对象检查器不理解 Infinity - 所以正如我已经假设的那样,属性编辑器不是为这些目的而设计的,但我可以分配 Infinity在代码中。

关于delphi - 在Delphi中,浮点类型最大值的关键字是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23358586/

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