我遇到一个奇怪的问题,至少影响了我的Delphi 6应用程序的一些国际用户。这是场景:
这在大多数PC上运行良好,但是当我尝试对数值使用StrToFloat()时,我的一些国际用户正在获得 EConvertError 。以下是我的日志中的错误消息的具体示例:
EConvertError:' - 0.685'不是有效的浮点值
正如您所看到的,-0.685 是一个有效的浮点数,但我得到了EConvertError异常。通常情况下,我希望看到小数点所在的逗号或其他一些特定于区域设置的标点问题,但在这种情况下,数字看起来很好。此外,据我所知,外部设备甚至没有设置字符集的选项。
那么Delphi 6和国际字符集的细微差别可能会导致这个问题,可能与用户的Windows XP / Win7字符设置有关?注意,我在整个程序中使用标准的Delphi 6“ string ”强制转换字符串,因此我没有看到多字节字符集问题是如何成为根本原因的。有谁有这个问题,知道该怎么办吗?
答案 0 :(得分:8)
您的远程用户的计算机期望小数分隔符为,
。当遇到.
时,会引发EConvertError
异常。在期望,
作为小数分隔符的计算机上(例如,大多数欧洲和南美国家/地区)-0.685
确实不是有效的浮点值。
通常情况下,我希望看到小数点所在的逗号,或其他一些特定于区域设置的标点符号问题,但在这种情况下,数字似乎正常。
您当前的问题只是上述问题的另一面。通常,由于您的区域设置使用.
作为分隔符,因此您习惯于在使用,
的数据时遇到问题。把你自己置于一个使用,
作为分隔符的国家的位置。对于他们来说,当使用.
的数据时,他们将习惯于看到异常。
您可以通过规范化输入以使用与计算机区域设置相同的小数分隔符来解决问题。在现代Delphi上,您可以通过使用接收StrToFloat
参数的TFormatSettings
重载来解决问题,并明确指定.
将用作此转换的小数分隔符。遗憾的是,该设施在Delphi 6中不可用。
答案 1 :(得分:1)
我为比利时用户面对这个问题。我还必须手动更换'。'或输入数据中的“,”。 此外,如果要将数据插入数据库(sql),则必须将','替换为'。'在将数据插入数据库期间。