كيفية إخراج أرقام النقطة العائمة في الشكل الأصلي في C++?

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

  •  07-07-2019
  •  | 
  •  

سؤال

انها الترميز الممارسة.قرأت هذه الأرقام كما double من ملف:
112233 445566
8717829120000 2.4
16000000 1307674.368
10000 2092278988.8
1234567 890123
بعد بعض الحسابات ، يجب أن إخراج بعض منهم.أريد لجعلها تبدو كما في الملف, لا يملأ الأصفار لا العلمي ، كيف يمكن لي تحقيق ذلك ؟ هل يجب أن تقرأ في سلسلة ثم تحويل لهم ؟

تحرير: Erm... هل أنتم يعني في الواقع ليس هناك طريقة للحصول على البرنامج أن تعرف كيف تبدو الأرقام مثل أصلا ؟

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

المحلول

إذا كنت تريد إخراج تكون مطابقة المدخلات, ثم نعم, أنت بحاجة إلى قراءة لهم في سلاسل تخزين السلاسل أن يكون الإخراج في وقت لاحق.

لماذا ؟ عند التعامل مع أرقام النقطة العائمة, الكمبيوتر لا يمكن أن تمثل معظم كسور عشرية أجزاء بالضبط في الثنائية.حتى في عدد مثل 2.4 الداخلية التمثيل لن يكون بالضبط 2.4, أنها سوف تكون مختلفة قليلا.أكثر من مرة, C/C++ I/O المكتبات سوف تأخذ مثل هذه الثنائية عدد وطباعة 2.4, ولكن بعض الأرقام قد طباعة شيء مثل 2.40000000001 أو 2.399999999.

لهذا السبب كنت ترغب في الحفاظ على النص الأصلي في جميع أنحاء.

نصائح أخرى

هناك المدمج في طريقة للقيام بذلك.نعم, سوف تحتاج إلى الحفاظ على الأصلي التمثيل و بعض الارتباط بين هذا تمثيل و تحليل عدد (a map<string, double> على سبيل المثال).

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

تقرأ لهم سلاسل, سجل العديد من finnicky الجوانب (هل لديهم العشرية الأجزاء ، كم ، أي الحشو أصفار ، الخ ، الخ) و تذكر كل تلك الجوانب لكل حقل ، وتحويلها إلى أرقام إذا كنت على الاطلاق ويجب ، ثم استخدام كل مجنون جانب القليل تخزين عند تنسيق أرقام الناتج مرة أخرى.مجنونة ولكن الطريقة الوحيدة لتحقيق حرفيا ما كنت طالبا.

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