I suppose the real is: "Why does 64.07 * 100 not simply equal 6407?"
Well, can 64.07 be represented in binary? Let's try
2^6 + 2^-4 + 2^-8...
To be honest, there's really not point in trying, as the answer most definitely is no.
Just like you can't represent 1/3, pi, sqrt(2), in decimal, you cannot represent 64.07 and many other numbers in binary.
And since integer casts are always floored, that is to say rounded down, you result's one less that you'd expect.
However you can get very very close, which is why if you remove the cast and change %d to %f, you will get the correct result.
I suppose if you really want to do it your way you'd need to round it.
- printf( "Hello, %d \n", lround( 64.07 * 100 ) )
And voila! The correct result appears.
And just to make sure there's not confusions, '%d' does not mean double, but signed integer. You need to use '%f' to print floats and doubles.
Best regards.