gpt4 book ai didi

delphi - Delphi 6 应用程序中使用 StrToFloat() 导致 EConvertError 的其他原因?

转载 作者:行者123 更新时间:2023-12-03 15:43:48 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,它至少影响了我的 Delphi 6 应用程序的一些国际用户。场景如下:

  • 我的程序定期从充当 HTTP 服务器的外部设备请求状态报告。
  • 设备将状态报告作为响应文档发回,其中包含一系列以名称值对格式的管道字符分隔的字段(例如 - field1=-0.437)。
  • 我将报告字符串拆分为字段,然后再次获取每个字段名称和数值。
  • 我使用 StrToFloat() 将浮点字段值转换为字符串格式,并将该函数的结果分配给Variant变量。

这在大多数 PC 上都可以正常工作,但当我尝试对数值使用 StrToFloat() 时,我的一些国际用户遇到了 EConvertError's。这是我的日志中的错误消息的具体示例:

EConvertError: '-0.685' is not a valid floating point value

如您所见,-0.685 是一个有效的 float ,但我收到了 EConvertError 异常。通常我希望看到小数点所在的逗号,或其他一些特定于语言环境的标点符号问题,但在这种情况下数字看起来很好。另外,据我所知,外部设备甚至没有设置字符集的选项。

那么 Delphi 6 和国际字符集的哪些细微差别可能会导致此问题,也许与用户的 Windows XP/Win7 字符设置有关?请注意,我在整个程序中使用标准 Delphi 6“string”转换字符串,因此我不明白多字节字符集问题可能是根本原因。有人遇到过这个问题并且知道该怎么办吗?

最佳答案

您的远程用户的计算机需要 , 作为小数点分隔符。当遇到 . 时,会引发 EConvertError 异常。在需要 , 作为小数点分隔符的机器上(例如大多数欧洲和南美国家),-0.685 确实不是有效的浮点值。

Normally I would expect to see a comma where the decimal point is, or some other locale specific punctuation problem, but the number appears fine in this case.

您当前的问题只是上述问题的反面。通常,由于您的语言环境使用 . 作为分隔符,因此您习惯于在使用 , 数据时遇到问题。将自己置于使用 , 作为分隔符的国家/地区的某个人的位置。对于他们来说,当使用带有 . 的数据时,他们会习惯于看到异常。

<小时/>

您可以通过规范输入以使用与计算机区域设置相同的小数分隔符来解决该问题。在现代 Delphi 上,您可以通过使用 StrToFloat 重载来解决该问题,该重载接收 TFormatSettings 参数并显式指定 . 用作此转换的小数点分隔符。不幸的是,该功能在 Delphi 6 中不可用。

关于delphi - Delphi 6 应用程序中使用 StrToFloat() 导致 EConvertError 的其他原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9895616/

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