2014-12-06 15 views
5

Tôi đang sử dụng TryStrToFloat để chuyển đổi chuỗi thành Biến kép. Tất cả mọi thứ hoạt động tốt cho đến khi chuỗi không giống như '21e'. Tôi nhận được kết quả chuyển đổi 21.TryStrToFloat chuyển đổi chuỗi không chính xác

Dường như với tôi rằng trình biên dịch xử lý '21e' như số 21e0. Chuỗi 21e1 cho kết quả 210. Khi tôi sử dụng chức năng chuyển đổi Val hoạt động tốt hơn. Chuỗi '21e' cho lỗi, nhưng bây giờ '21e1' cho 210, '21e-1' cho số 2.1, v.v.

Cách thực hiện chuyển đổi chính xác. Tôi có nên phát hiện chữ 'e' trong văn bản hay chỉ đơn giản là cách để chuyển đổi?

Trả lời

8

Các documentation nói:

Sử dụng TryStrToFloat để chuyển đổi một chuỗi, S, đến một giá trị dấu chấm động. S phải bao gồm một dấu tùy chọn (+ hoặc -), một chuỗi các chữ số có dấu thập phân tùy chọn và một phần tử tùy chọn. Phần chú giải gồm có 'E' hoặc 'e' theo sau là một dấu tùy chọn (+ hoặc -) và một số nguyên. Các khoảng trống đầu và cuối được bỏ qua.

Thông tin nhập của bạn không đáp ứng các điều kiện và do đó phải được coi là lỗi.

Bạn đã không nói như vậy rõ ràng, nhưng tôi đoán rằng bạn tuyên bố rằng:

TryStrToFloat('21e', val) 

lợi nhuận True. Nếu vậy, đây là lỗi và cần được báo cáo cho Embarcadero. Nếu bạn cần phải làm việc xung quanh điều này sau đó tôi đề nghị bạn mã chức năng của riêng bạn phát hiện trường hợp này và xử lý nó một cách chính xác.

Mặt khác, nếu cuộc gọi hàm đó trả về False, chức năng hoạt động như được thiết kế và sai lầm của bạn là đọc giá trị trong val.

Cập nhật

tôi có thể xác nhận rằng TryStrToFloat('21e', val) lợi nhuận True. Tôi đã thử nghiệm trên bản cập nhật XE7 1. Tôi đã gửi báo cáo lỗi sau tới Embarcadero: https://quality.embarcadero.com/browse/RSP-9814

+2

Thật vậy. 'TextToFloat' (được gọi bởi' TryStrToFloat') trả về 'TRUE' cho' 21e'. Thử nghiệm với XE, đó là dòng điện mới nhất tôi có trên chiếc máy đó ở đây. – JensG

+0

Cảm ơn bạn @ JensG, như tôi đoán bạn có thể nói rằng tôi đã không thể xác minh vấn đề này. –

Các vấn đề liên quan