سلام.
با کمک تابع floor و ceil که در math.h هست این تابع رو مینویسیم:
float RoundFlt(const float x, const int ex)
{
static const float pow_10_ex[] =
{
1.0f,
10.0f,
100.0f,
1000.0f,
10000.0f,
100000.0f,
1000000.0f
};
static const float inv_pow_10_ex[] =
{
1.0f,
0.1f,
0.01f,
0.001f,
0.0001f,
0.00001f,
0.000001f
};
int index = (ex > 6) ? 6 : ex;
float l_x = x * pow_10_ex[index];
return ((l_x < 0.0f) ? ceil(l_x - 0.5) : floor(l_x + 0.5f)) * inv_pow_10_ex[index];
};
مقدار ex ورودی تابع برای تعداد رقم های اعشار هست. متلا برای چهار رقم:
RoundFlt(a, 4);
البته این تابع برای مقادیری هست که توان ده بزرگ یا کوچیک نداشته باشن. مثلا عدد 1.9999e30 رو که در واقع 1999900000000000000000000000000 هست به 2.0e30 رند نمیکنه!





پاسخ با نقل قول