2012-01-27 25 views
5

Tôi có một vấn đề với những con số chính xác float:đầu ra dòng số float với độ chính xác

int main(void) { 
    double b = 106.829599; 
    float a = b; 
    std::cerr << std::setprecision(6) << "a = " << a << "; b = " << b << std::endl; 
    std::cerr << std::setprecision(7) << "a = " << a << "; b = " << b << std::endl; 
} 

kết quả là:

a = 106,83; b = 106.83

a = 106.8296; b = 106.8296

Vì vậy, câu hỏi của tôi là lý do tại sao con số trong dòng đầu tiên rất ngắn (Tôi đã mong đợi để xem 106,829)

gcc 4.1.2, cũng tôi đã thực hiện một thử nghiệm tại LWS

Trả lời

8

Trên thực tế, 106.829599 được làm tròn đến 6 chữ số (3 số thập phân) là 106.830, được hiển thị là 106.83 vì độ chính xác 6 chữ số được gán cho setprecision chỉ là giá trị tối đa.

Độ chính xác thập phân xác định số lượng tối đa các chữ số là viết về hoạt động chèn bày tỏ giá trị dấu chấm động.

Điều bạn có thể đang tìm kiếm là kết hợp setprecision với fixed.

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