2014-12-06 120 views
5

我使用TryStrToFloat將字符串轉換爲雙精度變量。一切正常,直到字符串看起來不像'21e'。我得到的轉換結果21.TryStrToFloat轉換不正確的字符串

在我看來,編譯器對待'21e'像編號21e0。字符串21e1給出結果210. 當我使用Val函數轉換效果更好。字符串'21e'給出錯誤,但現在'21e1'給出210,'21e-1'給出數字2,1等。

如何正確工作轉換。我應該在文本中檢測字母'e'還是任何簡單的轉換方法?

回答

8

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

+2

確實。 'TextToFloat'(由'TryStrToFloat'調用)返回'21e'的'TRUE'。經過XE測試,這是我在這臺機器上最新的。 – JensG 2014-12-07 01:35:49

+0

謝謝@JensG,我想你可以告訴我我無法驗證這個問題。 – 2014-12-07 08:24:22

相關問題