2014-12-06 17 views
5

Sto usando TryStrToFloat per convertire stringhe in variabili doppie. Tutto funziona bene finché la stringa non sembra "21e". Ottengo il risultato della conversione 21.TryStrToFloat converte stringa errata

Mi sembra che il compilatore tratti '21e' come il numero 21e0. La stringa 21e1 dà il risultato 210. Quando uso la conversione della funzione Val funziona meglio. La stringa '21e' dà errore, ma ora '21e1' dà 210, '21e-1' dà numero 2,1 ecc.

Come eseguire correttamente la conversione. Devo rilevare la lettera "e" nel testo, o è semplicemente un modo per convertire?

risposta

8

Il documentation dice:

Usa TryStrToFloat per convertire una stringa, S, per un valore a virgola mobile. S deve consistere in un segno opzionale (+ o -), una stringa di cifre con un punto decimale opzionale e una mantissa opzionale. La mantissa consiste di "E" o "e" seguiti da un segno opzionale (+ o -) e un numero intero. Gli spazi vuoti iniziali e finali vengono ignorati.

L'input non soddisfa le condizioni e pertanto deve essere considerato come un errore.

Lei non ha detto esplicitamente, ma presumo che si sostiene che:

TryStrToFloat('21e', val) 

rendimenti True. Se è così, questo è un bug e dovrebbe essere segnalato a Embarcadero. Se è necessario aggirare questo problema, suggerisco di codificare la propria funzione che rileva questo caso e lo gestisce correttamente.

D'altra parte, se quella chiamata di funzione restituisce False, la funzione si comporta come progettato e l'errore è quello di leggere il valore in val.

Aggiornamento

Posso confermare che TryStrToFloat('21e', val) rendimenti True. Ho provato l'aggiornamento XE7 1. Ho inviato il seguente bug report a Embarcadero: https://quality.embarcadero.com/browse/RSP-9814

+2

Infatti. 'TextToFloat' (chiamato da' TryStrToFloat') restituisce 'TRUE' per' 21e'. Testato con XE, questo è il più attuale che ho su quella macchina qui. – JensG

+0

Grazie @JensG, come immagino potresti dire che non ero stato in grado di verificare questo problema. –

Problemi correlati