سلام.
با کمک تابع 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 رند نمیکنه!