将文本转换为浮点数/整数/日期时,Delphi 消息“您已插入无效值”

Posted

技术标签:

【中文标题】将文本转换为浮点数/整数/日期时,Delphi 消息“您已插入无效值”【英文标题】:Delphi message "You have inserted an invalid value" when converting text to float / integer / Date 【发布时间】:2014-09-03 03:45:33 【问题描述】:

在我的应用程序中,当将文本转换为浮点/整数/日期值并将其分配给表格组件时,我收到一个消息框“您已插入无效值”。

我的实际代码如

Table1.Fieldbyname('XXX').value := strtofloat(Quantity.Text); 

这里 xxx 是浮点数据类型,传递的值如 (5---6)

(或)

Table1.Fieldbyname('XXX').value := inttostr(Quantity.Text);

这里 xxx 是整数数据类型,传递的值如 (3+)

(或)

Table1.Fieldbyname('XXX').value := strtodatetime(Quantity.Text);

这里 xxx 是日期数据类型,传递的值如 (13/ss)。

在退出事件的编辑框上没有验证任何内容,

我的问题是,我正在使用 eureka-log 捕获异常,但这些消息没有被 eureka-log 赶上。这些消息是作为异常引发的还是只是警告消息?

如果是异常在eureka-log中如何处理?

【问题讨论】:

IntToStr(Quantity.Text) 不是您的实际代码,是吗? 请给出逐字的错误信息,可能是截图。也许你也应该做一些调试。 Eureka 只能捕获未捕获的异常。大多数在主线程中引发的异常,尤其是在事件处理程序中,都会被 RTL 捕获以显示弹出消息。 您最好首先考虑一下为什么会收到错误消息。您应该避免分配给 .Value,而是使用 AsFloat、AsInteger、AsString、AsDateTime 等。顺便说一句,你的意思是什么? “(5---6)”? 如果这些是传递的文字值,例如'(3+)' 等,那么它不能正常工作也就不足为奇了。 【参考方案1】:

如果

... inttostr(Quantity.Text);

不是错字,那是你的问题,试试

.... strtoint(Quantity.Text);

【讨论】:

【参考方案2】:

在您实际代码中的位置

Table1.Fieldbyname('XXX').value := strtofloat(Quantity.Text);

计算您希望从strtofloat(Quantity.Text) 获得的值(或其中一个值)并将函数替换为文字值。例如:

Table1.Fieldbyname('XXX').value := 5.6;

如果执行此行产生相同的错误,那么您就知道问题出在Fieldbyname() 分配上。

如果这一行的执行没有产生同样的错误,那么你知道你没有从strtofloat(Quantity.Text) 得到你所期望的。

【讨论】:

以上是关于将文本转换为浮点数/整数/日期时,Delphi 消息“您已插入无效值”的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中的某些整数上使用位操作中断将整数转换为浮点数

C:将最小 32 位整数 (-2147483648) 转换为浮点数给出正数 (2147483648.0)

如何防止 Gson 将整数表示为浮点数

LLVM 通过将整数转换为浮点数

将 INT_MAX 转换为浮点数,然后再转换回整数。

将日期转换为浮点数以对 Pandas 数据框进行线性回归