تحديد الحد الأدنى لعدد الأماكن العشرية لـ STD :: Ostream Precision

StackOverflow https://stackoverflow.com/questions/2489627

سؤال

هل هناك طريقة لتعيين عدد "الحد الأدنى" للأماكن العشرية التي ستخرجها std :: ostream؟

على سبيل المثال ، قل أن لديّ متغيران مزدوجان غير معروفين أريد طباعته (تم إضافة القيم هنا من أجل التوضيح):

double a = 0;
double b = 0.123456789;

يمكنني ضبط الحد الأقصى من الدقة العشرية حتى أخرج b بالضبط

std::cout << std::setprecision(9) << b << std::endl;
>>> 0.123456789

هل هناك طريقة لوضع دقة "الحد الأدنى" (الحد الأدنى لعدد الأماكن العشرية) ، مع الاحتفاظ بدقة "الحد الأقصى" ، بحيث

std::cout << a << std::endl << b << std::endl;

عائدات

0.0
0.123456789

ليس

0
0.123456789

?

شكرًا! فيل


الجواب القصير لهذا هو "لا". يحتوي الدفق على إعداد دقيق واحد فقط ، مع عدم وجود منشأة للتمييز بين الحد الأقصى والحد الأدنى للدقة. شكرا جميع على نصيحتك السخية!

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

المحلول

لا أعتقد أن هناك طريقة لتحقيق ما تطلبه دون تحويل الرقم إلى سلسلة (بدقة عالية) ، وتجريد الأصفار الزائدة.

هذا مناسب ، لأنه لمجرد وجود أصفار زائدة لا يعني أنه لا يوجد دقة ، ولا يمكن لوقت التشغيل معرفة ذلك.

على سبيل المثال ، إذا قمت بقياس وزن كائن بمقياس رخيص ، فقد يكون 1.0 كجم.

إذا كنت أزنها بمقياس عالية الدقة ، فقد يكون 1.00000 كجم. لمجرد وجود أصفار زائدة ، لا يعني أنه ينبغي التخلص من الدقة.

نصائح أخرى

cout << setprecision(1) << fixed << d << endl;

تستخدم ثابتة بعد setPrecision.

تحرير: هذا ما تريد. سوف يتغير الدقة بناءً على د.

cout << setprecision(d?9:1) << fixed << d << endl;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top