اذهب إلى المحتوى

السؤال

نشر

السلام عليكم، كنت أقوم بكتابة تابع لحساب مساحة دائرة و لكن الخرج في بعض الأحيان يكون عبارة عن كثير من الأرقام بعد الفاصلة.

كما أنه أحيانا يظهر بالشكل العلمي، لكنني أريده أن يظهر مع رقمين بعد الفاصلة فقط فكيف يمكنني القيام بذلك؟

هذا هو الكود الذي قمت بكتابته:

#include<iostream>

using namespace std;

const double PI = 3.14;

double circle_area(double r){
	return r * r * PI;
}


int main(){

	double r;
	cin >> r;

	cout << circle_area(r) << '\n';

	return 0;
}

 

Recommended Posts

  • 1
نشر (معدل)

يمكن القيام بذلك باستعمال setprecision و التي تقوم بتحديد عدد الأرقام بعد الفاصلة.

يوجد هذا التابع في المكتبة iomanip و التي تحوي على الكثير من التوابع الخاصة بالتلاعب بالدخل و الخرج من ناحية التمثيل، من الجيد الإطلاع عليها لمعلومات إضافية.

يمكن القيام بما سبق بالشكل التالي:

#include<iostream>
#include<iomanip>

using namespace std;

const double PI = 3.14;

double circle_area(double r){
	return r * r * PI;
}


int main(){

	double r;
	cin >> r;

	cout << setprecision(2) << fixed << circle_area(r) << '\n';

	return 0;
}

حيث هنا fixed تقوم بطباعة رقمين دائماً حتى لو كان يكفي رقم واحد بعد الفاصلة، في حال كنت لا تريد ذلك يمكنك إزالتها فقط.

تم التعديل في بواسطة Kais Hasan
  • 1
نشر

هناك طرق عديدة لتحديد عدد الأرقام بعد الفاصلة في لغة c++ :

  • باستعمال دالة ()round :

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

#include <iostream>
#include <cmath>
 
int main()
{
    float f = 10.517986;
 
    float value = round(f * 100) / 100;
    std::cout << value << std::endl;        // 10.52
 
    return 0;
}

لتقريب رقم من نوع double إلى منزلتين عشريتين ، يمكنك استخدام دالة std :: ceil على النحو التالي:

#include <iostream>
#include <cmath>
 
int main()
{
    float f = 10.517986;
 
    float value = floor(f * 100) / 100;
    std::cout << value << std::endl;        // 10.51
 
    return 0;
}
  • باستعمال دالة std::ios_base::precision 

لتعيين المنزلة العشرية لقيمة الفاصلة floating-point. يمكنك استخدام std :: ostringstream مع محدد الدقة مثل std :: cout.

#include <iostream>
#include <sstream>
 // كتابة دالة لتسهيل عملية التحديد 
std::string format(float f, int digits) {
  // نستعمل الدالة ostringstream
    std::ostringstream ss;
    ss.precision(digits);
    ss << f;
    return ss.str();
}
 
int main()
{
    float f = 10.517986;
    int digits = 4;
 //نستدعي الدالة
    std::string value = format(f, digits);
    std::cout << value << std::endl;        // 10.52
 
    return 0;
}

 

  • 0
نشر

بإمكانك استخدام وظيفة ceil من مكتبة cmath كعائد بداخل الدالة التي عرفتها:

double circle_area(double r){
	double c= r * r * PI;
	return std::ceil(c * 100.0) / 100.0;
	
}

و لاتنسى تضمين المكتبة cmath في الكود:

#include <cmath>

تجد هنا مميزات هذه الوظيفة التقريبية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...