2015-06-26 11 views
6

Tôi đã đọc nhiều lần trong articles và MSDN float (hoặc double) không có đại diện chính xác của số nguyên hoặc giá trị thập phân thực. Chính xác ! Điều đó có thể nhìn thấy khi kiểm tra bình đẳng đi sai hoặc cũng trong khi khẳng định các phép thử cộng hoặc trừ đơn giản. Nó cũng nói rằng float không có đại diện chính xác của các giá trị thập phân như 0,1, nhưng sau đó nếu chúng ta tuyên bố một phao trong phòng thu trực quan như float a = 0.1f;, làm thế nào để chúng hiển thị chính xác 0,1 trong khi gỡ lỗi? Nó sẽ hiển thị một cái gì đó như 0.09999999... Nơi nào tôi bỏ lỡ một liên kết để hiểu nó.Tại sao phao hiển thị biểu diễn chính xác khi khai báo

enter image description here

Nó là một loại giáo dân của câu hỏi hoặc có thể tôi vẫn còn thiếu một số khái niệm!

+1

'0.1f' là một cái gì đó như' 0.100000001490116119384765625', vì vậy chỉ trên chữ số có nghĩa thứ 9 bạn có gì đó! = 0 sau '1' ban đầu và' float' chỉ có độ chính xác khoảng 7 chữ số. – xanatos

Trả lời

15

làm thế nào để họ thể hiện chính xác 0,1 trong khi gỡ lỗi

0,1 không phải là giá trị chính xác của phao. Nó xảy ra là những gì bạn chỉ định trong nhiệm vụ ban đầu, nhưng đó không phải là giá trị của phao. Tôi có thể thấy nó khó hiểu :) Tôi nghi ngờ trình gỡ rối đang hiển thị biểu diễn chuỗi ngắn nhất mà kết thúc rõ ràng ở cùng một giá trị.

Hãy thử sử dụng:

float a = 0.0999999999f; 

... và sau đó tôi nghi ngờ trong debugger bạn sẽ thấy rằng như 0.1 là tốt.

Vì vậy, không phải trình gỡ lỗi đang hiển thị giá trị "chính xác hơn" - đó là giá trị hiển thị biểu diễn "thuận tiện hơn".

Nếu bạn muốn hiển thị giá trị chính xác được lưu trữ trong phao hoặc đôi, tôi có some code you can use for that.

+0

Cảm ơn Jon! Tôi đã đọc bài viết của bạn và bài viết khác được bạn chỉ ra. Tôi cũng chạy DoubleConverter.cs. Tất cả cùng nhau nêu ra câu hỏi này. Nhưng bây giờ tôi rõ ràng hơn. – Marshal

+0

Trước khi bạn trả lời, tôi cũng tự hỏi ý bạn là gì bằng cách biểu diễn chính xác float bằng cách viết DoubleConverter; bởi vì như trong câu hỏi, bản thân IDE đã cho thấy 0.1. – Marshal

+0

@NirajDoshi: Đúng - và quan điểm của tôi là 0.1 * không phải * giá trị chính xác. Tôi sẽ chỉnh sửa câu trả lời để làm rõ hơn. –

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