كيف يمكنني تغيير دقة الطباعة مع STL؟
سؤال
أرغب في طباعة الأرقام إلى ملف باستخدام STL مع عدد الأماكن العشرية ، بدلاً من الدقة الشاملة.
لذا ، إذا فعلت هذا:
int precision = 16;
std::vector<double> thePoint(3);
thePoint[0] = 86.3671436;
thePoint[1] = -334.8866574;
thePoint[2] = 24.2814;
ofstream file1(tempFileName, ios::trunc);
file1 << std::setprecision(precision)
<< thePoint[0] << "\\"
<< thePoint[1] << "\\"
<< thePoint[2] << "\\";
سأحصل على أرقام مثل هذا:
86.36714359999999\-334.8866574\24.28140258789063
ما أريده هو:
86.37\-334.89\24.28
وبعبارة أخرى ، اقتطاع نقطتين عشريتين. إذا قمت بتعيين الدقة لتكون 4 ، فسأحصل
86.37\-334.9\24.28
أي ، يتم اقتطاع الرقم الثاني بشكل غير صحيح.
لا أريد أن أضطر إلى معالجة كل رقم بشكل صريح للحصول على الاقتطاع ، خاصةً لأنه يبدو أنني أحصل على 9 تكرار أو 0000000001 أو شيء من هذا القبيل.
أنا متأكد من أن هناك شيئًا واضحًا ، مثل استخدام printf (٪. 2F) أو شيء من هذا القبيل ، لكنني غير متأكد من كيفية خلط ذلك مع STL << و Ofstream.
المحلول
استخدم STD :: ثابت ، هذا يجب أن يعمل من أجلك.
file1 << std::fixed << std::setprecision(precision)
<< thePoint[0] << "\\"
<< thePoint[1] << "\\"
<< thePoint[2] << "\\";
لا تنتمي إلى StackOverflow