Division in VC++

Hello Experts,

I want to perform a simple calculation but I am not getting the accurate results .
long a = 380835764;
long b = 458083024;

double c = (a / b) ;

The value that getting printed is zero always. I am intrested in quotient....

I am working in VC+
Who is Participating?

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
Try this :

double c = ((double) a) / b;

The reason is that with your line, the compiler uses integer division, instead of real division.
0

Experts Exchange Solution brought to you by

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

R & D Engineering ManagerCommented:
Reason is, 'long' will omit/drop the decimal part before it returns.
say operation  (a / b), both a & b are long then it will return only the values other than the decimal part.

also for example:

long a = 380835764.5555; //a will be 380835764
long b = 458083024.6666; //b will be 458083024
double c = (a / b) ; //c will be 0 and omit the decimal part

you could either make both the 'long' variable to 'double' or you can do what Infinity suggested.

Best regards,
DeepuAbrahamK

0
Author Commented:
Still it Shows the same error...

I am working on VC++ .Net in Visual Studio 2005.

Its very urgent.....I will increase the points...
0
Commented:
>> Still it Shows the same error...

What error ? You didn't mention an error ...

Did you try this :

long a = 380835764;
long b = 458083024;

double c = ((double) a) / b;

cout << c << endl;
0
Commented:
double c = ((double) a) / b; should have worked,
How are you printing the zero value?
0
Author Commented:
I will paste the code....

long NewValue2 , Total ;
double percent;

fprintf(fd,"\n The values at iteration  NewValue2=%ld Total=%ld\n",NewValue2,Total);
o/p for above line....NewValue2 = 380835764 ,Total = 458083024 ;

percent = ((double)NewValue2)/((Total)) ;

fprintf(fd,"\n The value of percent is %lf \n",percent);// Gives output as 0.00000.
0
Commented:
Are you sure ?

Is there any other code you didn't show ?

Did you recompile the code after making the changes ?

It should show 0.117647
0
Commented:
Oh, and I see you're using a file for output. Try erasing the file before running the program ...
0
Commented:
... and if that still does not work, try

percent = ((double)NewValue2)/((double)(Total)) ;
0
Author Commented:
i already tried the above one.......
0
Commented:
>> i already tried the above one.......

0
Author Commented:
Are you sure ? Yes

Is there any other code you didn't show ? There is nothing that I can Show..I crated an empty project
and Just experimenting before I implent it in my project..

Did you recompile the code after making the changes ? Yes , I rebuilded ( Ctrl + Alt +F7)

It should show 0.117647 // No its not Showing...
0
Commented:
Create an empty project, and put this code in it :

#include <stdio.h>

int main(void) {
long NewValue2 , Total ;
double percent;

FILE *fd = fopen("out.txt", "w");

fprintf(fd,"\n The values at iteration  NewValue2=%ld Total=%ld\n",NewValue2,Total);

percent = ((double)NewValue2)/((Total)) ;

fprintf(fd,"\n The value of percent is %lf \n",percent);

fclose(fd);
return 0;
}

You'll see that it DOES work, unless you have a compiler that doesn't follow the standard.
0
Author Commented:
I got it working, I dont know the mistake that I made earlier but it really didn;t work at that time......I am really a fool......