2010-09-20 21 views
7

Floring'den C++ string'e ostringstream kullanarak dönüştürme ile ilgili bir sorunum var. İşte benim çizgidir:Şebeke yönlendirme ile şutları yuvarlama

void doSomething(float t) 
{ 
    ostringstream stream; 
    stream << t; 
    cout << stream.str(); 
} 
o -0.9 kapalı yuvarlak -0,89999 t değeri vardır

ama değer olduğunda bu 1.754e-7, sadece kapalı yuvarlak olmadan yazdırır demek daha 0,0999 ya da daha az olduğunu. bunun için çözüm ne olabilir.

+0

Neden floatı doğrudan "cout" ye geçirmiyorsunuz? –

+0

@In silico, aslında bu değeri kodumun bir noktasında kullanmak istiyorum. – boom

+0

@In silico, aslında ne diyorsunuz çalışmıyor. – boom

cevap

14

Sen precision

örn

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

cout<<stream.str(); 
+0

Ben 0.0999 için çözüm var, ama 7.9e-08 sayısı için hala aynı oluyor. bunun için çözüm ne olabilir? – boom

+0

akışının kendisinin kesinliğini ayarlamanız gerekir. yani stream.precision (3); – yadab

+0

Aynı şeyi yapıyorum. İşte benim kodum: ostringstream akışı; \t \t \t stream.precision (1); \t \t \t akışı << t; \t \t cout << endl << "Değer:" << stream.str(); – boom

6

Belirli sayıda önemli rakamın görüntülenmesini istiyorsanız, setprecision (n) kullanmayı deneyin. Burada n, istediğiniz anlamlı sayıların sayısıdır.

stream << setprecision(5) <<t ; 

Şimdi, dize stream.str() gerekli hassasiyet olacaktır:

#include <iomanip> 

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

Neden "cout" için bir dize gönderirken hassaslığı ayarlamak istersiniz ...? –

+0

shuttle87, bariz bir hatayı düşündüğüm şeyi düzelttim. Umarım sakıncası yoktur. – sbi

0

kullanın setprecision kullanarak ostringstream için hassas ayarlamak gerekir .

+0

Ben 0.0999 için bir çözüm var, ama 7.9e-08 sayısı için hala aynı oluyor. bunun için çözüm ne olabilir? – boom

2

Eğer sabit noktası yerine bilimsel gösterim istiyorsanız, std::fixed kullanın:

stream << std::fixed << t; 

Ek olarak belirtildiği gibi hassas ayarlamak isteyebilirsiniz.