【发布时间】:2014-04-29 07:43:21
【问题描述】:
注意:这个问题已被编辑,因为我的问题变得完全不同。您将在 MBo's answer 中找到问题 What's the keyword for the maximal value for a floating point type? 的直接答案 - 使用 System.Math 的常量。
Delphi 提供了多种浮点值类型。 开头有 Single、Double 和 Extended。
上周我查找了最大浮点值的关键字是什么,发现: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。
对此感到相当高兴,我保存了我的表格并继续我的工作。那天晚些时候我编译了表单,成功地测试了表单可以保存1E308的值。
第二天……
在记事本中打开 .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的bug吗?我在 Windows 7 上使用 Embarcadero® Delphi® XE5 版本 19.0.14356.6604,32 位。
【问题讨论】:
-
如果出现奇怪的错误,首先要做的是关闭/重新打开 IDE,重新打开项目并重建(不仅仅是重新编译)项目。
标签: delphi delphi-xe5