【发布时间】:2014-12-02 02:51:18
【问题描述】:
我正在使用旧的 Paradox 数据库以及我继承的旧 Delphi 程序,当我点击以下语句时,它一直给我一个 Number is out of range 错误:
POE_Data.OrdersTaxRate.AsFloat:= StrToFloat(Copy(TaxRateLabel.Caption, 1,1));
TaxRateLabel.Caption 等于 7%,因此 StrToFloat 只传递了第 7 个字符。 TaxRate 字段在数据库中定义为具有 2 个小数位的 BCD 字段。我没有看到数据库中设置了任何最小值或最大值,那么为什么会产生数字超出范围错误?
【问题讨论】:
-
数据库中 OrdersTaxRate 字段的类型?例如,对于 Postgres,不可能将大于 0.99 的值分配给类型为
numeric(2,2)的字段,因为(我记得)类型声明中的第一个参数是值的位数的总数(包括精度)。 -
OrdersTaxRate 是一个带有 2 位小数的 BCD 字段。
-
不幸的是,我对 Paradox 并不熟悉(实际上我几乎忘记了它们)。所以,这不是答案,只是提示:尝试这两个代码 sn-ps:
POE_Data.OrdersTaxRate.AsFloat := 0.1;和POE_Data.OrdersTaxRate.AsFloat := 1.0;如果第一个有效,第二个无效 - 您在数据类型方面遇到了一些问题。 -
还有一个提示:尝试使用
POE_Data.OrdersTaxRate.Value而不是POE_Data.OrdersTaxRate.AsFloat -
我尝试了上面所有的建议,但没有一个奏效。我检查了数据库中的其他记录,它们的值似乎是 7.00。
标签: delphi delphi-xe6 paradox