我正在使用TryStrToFloat
将字符串转换为Double变量。一切正常,直到字符串看起来不像'21e'。我得到转换结果21。
在我看来,编译器将'21e'视为数字21e0。字符串21e1给出结果210。 当我使用Val函数转换效果更好。字符串'21e'给出错误,但现在'21e1'给出210,'21e-1'给出数字2,1等。
如何正确地进行转换。我应该在文本中检测到字母'e',还是只是简单的转换方式?
答案 0 :(得分:8)
使用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