【问题标题】:TryStrToFloat converts incorrect stringTryStrToFloat 转换不正确的字符串
【发布时间】:2014-12-06 22:57:17
【问题描述】:

我正在使用 TryStrToFloat 将字符串转换为 Double 变量。一切正常,直到字符串看起来不像'21e'。我得到转换 21 的结果。

在我看来,编译器将“21e”视为数字 21e0。字符串 21e1 给出结果 210。 当我使用 Val 函数转换效果更好。字符串 '21e' 给出错误,但现在 '21e1' 给出 210,'21e-1' 给出数字 2,1 等等。

如何正确进行转换。我应该检测文本中的字母“e”,还是任何简单的转换方法?

【问题讨论】:

    标签: string delphi type-conversion


    【解决方案1】:

    documentation 说:

    使用 TryStrToFloat 将字符串 S 转换为浮点值。 S 必须包含一个可选的符号(+ 或 -)、带有可选小数点的数字字符串和可选的尾数。尾数由“E”或“e”后跟可选符号(+ 或 -)和整数组成。前导和尾随空格将被忽略。

    您的输入不满足条件,因此应被视为错误。

    你没有这么明确地说,但我推测你声称:

    TryStrToFloat('21e', val)
    

    返回True。如果是这样,这是一个错误,应该报告给 Embarcadero。如果您需要解决这个问题,那么我建议您编写自己的函数来检测这种情况并正确处理它。

    另一方面,如果该函数调用返回False,则该函数的行为符合设计,而您的错误是读取了val 中的值。

    更新

    我可以确认TryStrToFloat('21e', val) 返回True。我在 XE7 更新 1 上进行了测试。我向 Embarcadero 提交了以下错误报告:https://quality.embarcadero.com/browse/RSP-9814

    【讨论】:

    • 确实如此。 TextToFloat(由TryStrToFloat 调用)为21e 返回TRUE。用 XE 测试,这是我在这台机器上的最新版本。
    • 谢谢@JensG,我想你可以看出我无法验证这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-04-09
    • 2013-07-13
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多