سؤال

لدي مشكلة فيما يتعلق بالتحويل من سلسلة Float إلى C ++ باستخدام OstringStream. ها هو خطي:

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

عندما يكون T قيمة -0.89999 ، فإنها تصل إلى -0.9 ، ولكن عندما تكون القيمة 0.0999 أو أقل من هذا يقول 1.754E -7 ، فإنه يطبع فقط دون انطلاق. ماذا يمكن أن يكون الحل لهذا الغرض.

هل كانت مفيدة؟

المحلول

تحتاج إلى ضبط الدقة لاستخدام OstringStream precision

على سبيل المثال

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

cout<<stream.str();

نصائح أخرى

إذا كنت تريد عددًا معينًا من الأرقام المهمة المعروضة ، فحاول استخدام setPrecision (n) حيث N هو عدد الأرقام المهمة التي تريدها.

#include <iomanip>

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

إذا كنت تريد نقطة ثابتة بدلاً من الترميز العلمي ، فاستخدم std::fixed:

stream << std::fixed << t;

بالإضافة إلى ذلك ، قد ترغب في ضبط الدقة كما هو مذكور.

يستخدم setPrecision:

stream << setprecision(5) <<t ;

الآن ، سلسلتك stream.str() سيكون من الدقة المطلوبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top