سؤال

أرغب في طباعة الأرقام إلى ملف باستخدام 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] << "\\";

نصائح أخرى

محاولة

file1 << std::setiosflags(ios::fixed) << std::setprecision(precision)

الذي يحدد تنسيق نقطة ثابتة بدلاً من نقطة العائمة.

(بالمناسبة ، هذا ليس كذلك STL. إنه iostream.)

…أوه! أعتقد أن كومار تحسنني std::fixed.

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