সি-এ একটি লাইনের ফাংশন লিখে ফ্লোটিং-পয়েন্ট নম্বর নিকটতম পূর্ণসংখ্যায় রাউন্ড করা যায়। লজিক: পজিটিভ নম্বরের সাথে ০.৫ যোগ করুন, নেগেটিভ নম্বরের সাথে ০.৫ বিয়োগ করুন, তারপর ইন্টিজারে কাস্ট করুন।
লজিক
round(x) = (int)(x < 0 ? x - 0.5 : x + 0.5)
উদাহরণ
#include <stdio.h>
int my_round(float number) {
return (int)(number < 0 ? number - 0.5 : number + 0.5);
}
int main() {
printf("Rounding of (2.48): %d\n", my_round(2.48)); // 2
printf("Rounding of (-5.79): %d\n", my_round(-5.79)); // -6
printf("Rounding of (2.5): %d\n", my_round(2.5)); // 3
printf("Rounding of (-2.5): %d\n", my_round(-2.5)); // -3
return 0;
}
আউটপুট
Rounding of (2.48): 2
Rounding of (-5.79): -6
Rounding of (2.5): 3
Rounding of (-2.5): -3
স্ট্যান্ডার্ড লাইব্রেরি ফাংশন (C99/C++11)
#include <math.h> // C
// #include <cmath> // C++
round(2.48) // 2.0 (double)
roundf(2.48f) // 2.0f (float)
roundl(2.48L) // 2.0L (long double)
// রিটার্ন টাইপ একই ফ্লোটিং-পয়েন্ট, ইন্ট চাইলে:
int r = (int)round(2.48);
রাউন্ডিং মোড (fesetround)
round() সবসময় "half away from zero" করে। কিন্তু rint(), nearbyint() বর্তমান রাউন্ডিং মোড অনুসরণ করে (FE_TONEAREST, FE_DOWNWARD, FE_UPWARD, FE_TOWARDZERO)।
সতর্কতা
- হarf-ওয়ে (x.5) কেসে
roundশূন্য থেকে দূরে রাউন্ড করে (২.৫→৩, -২.৫→-৩) - ব্যাংকস রাউন্ডিং (Round half to even) চাইলে
rint()বাnearbyint()ব্যবহার করুনFE_TONEARESTমোডে - বড় ফ্লোটিং-পয়েন্ট নম্বরের জন্য ইন্টে কাস্ট করলে ওভারফ্লো হতে পারে —
long longবাint64_tব্যবহার করুন