2013-06-27 23 views
16

Tôi thấy nhiều câu hỏi về số lượng chính xác cho số dấu chấm động nhưng đặc biệt tôi muốn biết tại sao mã nàysử dụng đúng của std :: cout.precision() - không in trailing số không

#include <iostream> 
#include <stdlib.h> 
int main() 
{ 
    int a = 5; 
    int b = 10; 
    std::cout.precision(4); 
    std::cout << (float)a/(float)b << "\n"; 
    return 0; 
} 

lãm 0.5? Tôi mong đợi để xem 0.5000. Có phải vì các kiểu dữ liệu số nguyên gốc không?

Trả lời

17
#include <iostream> 
#include <stdlib.h> 
#include <iomanip> 
int main() 
{ 
    int a = 5; 
    int b = 10; 
    std::cout << std::fixed; 
    std::cout << std::setprecision(4); 
    std::cout << (float)a/(float)b << "\n"; 
    return 0; 
} 

Bạn cần phải vượt qua std::fixed thao túng để cout để hiển thị trailing zeroes.

0

Hành vi là chính xác. Đối số xác định số lượng chữ số có ý nghĩa tối đa để sử dụng. Nó không phải là tối thiểu. Nếu chỉ theo số 0, chúng không được in vì số 0 ở cuối phần thập phân không có ý nghĩa. Nếu bạn muốn in các số 0, thì bạn cần đặt cờ thích hợp:

std::cout.setf(std::ios::fixed, std::ios::floatfield); 

Điều này đặt ký hiệu thành "cố định", in tất cả các chữ số.

2

std::cout.precision(4); cho biết số lượng tối đa tối đa để sử dụng không tối thiểu. đó có nghĩa là, ví dụ, nếu bạn sử dụng

precision 4 on 1.23456 you get 1.234 
precision 5 on 1.23456 you get 1.2345 

Nếu bạn muốn nhận được n chữ số bất cứ lúc nào bạn sẽ phải sử dụng std::fixed.

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