2010-09-20 44 views
7

Tôi gặp vấn đề liên quan đến việc chuyển đổi từ chuỗi float sang C++ bằng cách sử dụng ostringstream. Đây là dòng của tôi:Làm tròn các phao nổi với ostringstream

void doSomething(float t) 
{ 
    ostringstream stream; 
    stream << t; 
    cout << stream.str(); 
} 

khi t có giá trị -0,89999 nó tròn tắt để -0.9, nhưng khi giá trị của nó là 0,0999 hoặc ít hơn nói điều này 1.754e-7, nó chỉ in mà không cần vòng tắt. những gì có thể là giải pháp cho việc này.

+0

Tại sao bạn không chuyển trực tiếp phao sang 'cout'? –

+0

@Trong silico, thực sự tôi muốn sử dụng giá trị đó tại một số điểm trong mã của tôi. – boom

+0

@ Trong silico, những gì bạn thực sự nói không hoạt động. – boom

Trả lời

14

Bạn cần phải thiết lập chính xác cho ostringstream sử dụng precision

ví dụ

stream.precision(3); 
stream<<fixed; // for fixed point notation 
//cout.precision(3); // display only 
stream << t; 

cout<<stream.str(); 
+0

tôi đã nhận giải pháp cho 0,0999, nhưng đối với số 7,9e-08 tôi vẫn nhận được như vậy. vì vậy những gì có thể là giải pháp cho việc này. – boom

+0

bạn cần đặt độ chính xác cho chính luồng đó. ví dụ: stream.precision (3); – yadab

+0

tôi cũng làm như vậy. đây là mã của tôi: dòng ostringstream; \t \t \t stream.precision (1); \t \t \t luồng boom

6

Nếu bạn muốn một số cụ thể các số liệu quan trọng được hiển thị, hãy thử sử dụng setprecision (n) trong đó n là số lượng số liệu quan trọng bạn muốn.

#include <iomanip> 

void doSomething(float t) 
{ 
    ostringstream stream; 
    stream << std::setprecision(4) << t; 
    cout << stream.str(); 
} 
+1

Tại sao bạn muốn đặt độ chính xác khi gửi một chuỗi tới 'cout' ...? –

+0

shuttle87, tôi đã khắc phục những gì tôi coi là lỗi rõ ràng. Tôi hy vọng bạn không nhớ. – sbi

0

Sử dụng setprecision:

stream << setprecision(5) <<t ; 

Bây giờ, chuỗi của bạn stream.str() sẽ có độ chính xác cần thiết .

+0

tôi đã nhận giải pháp cho 0,0999, nhưng đối với số 7,9e-08 tôi vẫn nhận được như vậy. vì vậy những gì có thể là giải pháp cho việc này. – boom

2

Nếu bạn muốn cố định điểm thay vì ký hiệu khoa học, sử dụng std::fixed:

stream << std::fixed << t; 

Bên cạnh đó bạn có thể muốn thiết lập chính xác như đã đề cập.

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