تقريب العوامات مع OstringStream
-
04-10-2019 - |
سؤال
لدي مشكلة فيما يتعلق بالتحويل من سلسلة 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()
سيكون من الدقة المطلوبة.
لا تنتمي إلى StackOverflow