2011-12-18 82 views

Trả lời

15

Sử dụng setfprecision.

#include <iostream> 

using namespace std; 

int main() { 
    double f = 3.14159; 
    cout.setf(ios::fixed,ios::floatfield); 
    cout.precision(3); 
    cout << f << endl; 
    return 0; 
} 

này in 3.142

+0

Cảm ơn. Nó rất hữu ích cho tôi. – ozeron

+0

Điều này làm việc cho 3,14159 nhưng nó không hoạt động cho 13,14159. Giải pháp của bạn chỉ hoạt động đối với các số nhỏ hơn 10. – mantler

+0

@manler Bạn nói đúng, bài đăng gốc của tôi không đúng, nhưng bài cuối cùng (bài tôi đã chỉnh sửa 11 phút trước) hoạt động chính xác. Tôi xác minh nó với 2 và 3 chữ số trước dấu thập phân, và nó in 3 chữ số như mong đợi. – dasblinkenlight

6

Con này có hiển thị "13,141"

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main(){ 
    double f = 13.14159; 
    cout << fixed; 
    cout << setprecision(3) << f << endl; 
    return 0; 
} 
4

Bạn có thể nhận được số chữ số phân số (và nhiều thứ khác) cố định bằng công iomanip tiêu đề. Ví dụ:

#include <iostream> 
#include <iomanip> 

int main() { 
    double pi = 3.141592653589; 
    std::cout << std::fixed << std::setprecision(2) << pi << '\n'; 
    return 0; 
} 

chí đầu ra:

3.14 

Lưu ý rằng cả hai fixedsetprecision thay đổi dòng vĩnh viễn như vậy, nếu bạn muốn để bản địa hoá các hiệu ứng, bạn có thể lưu thông tin trước và khôi phục lại nó sau đó :

#include <iostream> 
#include <iomanip> 

int main() { 
    double pi = 3.141592653589; 

    std::cout << pi << '\n'; 

    // Save flags/precision. 
    std::ios_base::fmtflags oldflags = std::cout.flags(); 
    std::streamsize oldprecision = std::cout.precision(); 

    std::cout << std::fixed << std::setprecision(2) << pi << '\n'; 
    std::cout << pi << '\n'; 

    // Restore flags/precision. 
    std::cout.flags (oldflags); 
    std::cout.precision (oldprecision); 

    std::cout << pi << '\n'; 

    return 0; 
} 

sản lượng đó là:

3.14159 
3.14 
3.14 
3.14159 
+0

Cảm ơn bạn đã cho biết cách lưu và khôi phục cài đặt luồng, rất hữu ích. – bhaller

+0

sử dụng dòng này "sử dụng không gian tên std;" để có mã sạch hơn –

+0

@ Khaled, có đối số và chống lại điều phức tạp đến mức chúng không vừa trong hộp nhận xét :-) Bản thân tôi thích không gian tên rõ ràng cho tất cả các chương trình đơn giản nhất hoặc, ở mức tối thiểu, sử dụng các mục cụ thể * trong * một không gian tên thay vì nhập toàn bộ lô. Tuy nhiên, cuộc thảo luận cụ thể đó là tiếp tuyến với câu hỏi và câu trả lời của tôi. – paxdiablo

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