Solved
Floating Point Problem
Posted on 1998-12-30
I have a C program that is running into problems rounding a float. The calculation is as follows
//faceamt = 5000000 and rate = 205.07
premium = (faceamt / 1000) * rate;
Round2Decimals(&premium);
//*******************************
void Round2Decimals(float *fn)
//********************************
{
long lrd;
double dg;
dg = ceil (*fn * 100);
if (dg - (double) *fn * 100 >= 0.51)
dg -= 1.0;
lrd = (long) dg;
*fn = (float) lrd / 100;
}
In the debugger, premium is calculated as 1.02535+e6 which appears to be correct. This value is then passed to a function to round it to two decimals...
The problem is that dg ends up with 102535007 which is incorrect. Where did the last two digits (07) come from and how can I avoid this without having to declare all variables as Doubles .
Thanks.
Upon further investigation...
I think the problem is typecasting a float to a double.
Example
float fltnum;
double dblnum;
fltnum = 205.07
dblnum = (double)fltnum;
//dblnum is now 205.07000732422. This is what is causing the problems...