Làm thế nào để phát hiện nếu atof hoặc _wtof không chuyển đổi chuỗi thành gấp đôi? Nhưng không phải bằng cách cố gắng kiểm tra xem kết quả có khác nhau ở dạng 0.0 vì đầu vào của tôi có thể là 0.0. Cảm ơn!Làm thế nào để phát hiện nếu atof hoặc _wtof thất bại?
Trả lời
Không sử dụng atof
. Thay vào đó, sử dụng strtod
, từ <cstdlib>
, và cũng kiểm tra errno
từ <cerrno>
:
// assume: "char * mystr" is a null-terminated string
char * e;
errno = 0;
double x = std::strtod(mystring, &e);
if (*e != '\0' || // error, we didn't consume the entire string
errno != 0) // error, overflow or underflow
{
// fail
}
Con trỏ e
điểm một quá khứ nhân vật tiêu thụ cuối cùng. Bạn cũng có thể kiểm tra e == mystr
để xem liệu có bất kỳ ký tự nào đã được sử dụng hay không.
Ngoài ra còn có std::wcstod
để làm việc với wchar_t
-strings, từ <cwstring>
.
Trong C++ 11 bạn cũng có std::to_string
/std::to_wstring
, từ <string>
, nhưng tôi tin rằng sẽ ném ngoại lệ nếu chuyển đổi không thành công, có thể không phải là chế độ thất bại mong muốn khi xử lý dữ liệu ngoài.
@TerranceCohen: Không. (Nhưng bạn vẫn có thể muốn kiểm tra 'errno' để nắm bắt và tràn.) –
Sử dụng atof
, bạn không thể. Nhưng vì đây là C++, tôi đề nghị bạn sử dụng một std::stringstream
và kiểm tra nó với operator !
sau khi áp dụng operator >>
đến một double
.
- 1. Phát hiện json_decode() thất bại trong PHP
- 2. Làm thế nào để thất bại trên
- 3. Làm thế nào để phát hiện nếu một bản sao git thất bại trong một tập lệnh bash
- 4. Làm thế nào để làm cho Hudson/Jenkins thất bại nếu ngưỡng Sonar bị vi phạm?
- 5. Làm thế nào để biết nếu một truy vấn thất bại trong Laravel 4?
- 6. Làm thế nào để thất bại một cách duyên dáng nếu .NET không được cài đặt?
- 7. làm thế nào để viết thất bại dự kiến?
- 8. Phát hiện ajax: thất bại trong Rails 3 mẫu
- 9. Dynamic_cast thất bại như thế nào?
- 10. Làm thế nào để kiểm tra RSpec thất bại?
- 11. Đánh dấu thượng lưu Jenkins/Hudson là thất bại nếu công việc hạ lưu thất bại
- 12. Tập tin batch của Windows NẾU thất bại - Làm thế nào có thể 30000000000000 bằng 40000000000?
- 13. Thất bại nhanh hoặc không an toàn?
- 14. Làm thế nào weakCompareAndSet có thể thất bại giả nếu nó được thực hiện chính xác như compareAndSet?
- 15. Làm thế nào để gỡ lỗi vấn đề thất bại gunicorn? (Worker thất bại trong việc khởi động)
- 16. Cách thực hiện lệnh ngắt $ (shell) thất bại Thực hiện
- 17. Làm thế nào để làm cho Delphi DUnit kiểm tra thất bại khi TSQLConnection.Connected = true
- 18. Nhảy vào trăn và hoặc thất bại
- 19. Làm thế nào để làm cho NUnit ngừng thực hiện các thử nghiệm trên thất bại đầu tiên
- 20. Thất bại khi xây dựng maven-antrun-plugin thất bại
- 21. Việc tắt CommandButton chức năng nếu inputText xác nhận thất bại hoặc gọi ajax bắt đầu
- 22. Làm thế nào để InputStreamReader thất bại trên dữ liệu không hợp lệ để mã hóa?
- 23. Thất bại/Thất bại Omniauth: Cách gỡ lỗi?
- 24. Maven Build thất bại - thất bại trong việc tìm plugin
- 25. Làm thế nào để phát hiện nếu M7 là hiện nay, a.k.a nó là một iPhone 5S hoặc mới hơn?
- 26. AngularJS: Giải quyết trong RouteProvider - phát hiện thành công/thất bại?
- 27. Làm thế nào để sử dụng thất bại googletest vào Break-Điểm
- 28. Groovy Generics thất bại
- 29. Git rebase một nhánh trên master thất bại, làm thế nào để giải quyết?
- 30. python thất bại
Bạn vừa phát hiện ra lý do tại sao sử dụng các chức năng atoX là xấu. – PlasmaHH