The default output for float variables in Serial.print() is 2 decimal places. They will get printed to that resolution, even if the actual floating point number is not an exact multiple of 0.01
I believe you can change this by writing Serial.print( longitude, 4 ) , which would print the value with 4 decimal places. Be aware that the total resolution of a float on the Arduino is around 6 significant figures, so if the number is big, like 12345.1234, you already have 5 of those significant figures on the left hand side of the decimal point, so only one of the figures on the right hand side of the decimal point is going to be any good, even though you have printed four of them. But if your number is 1.1234 , then there is no reason why all five digits are not good.
I've had quite a lot of trouble logging data to SD cards. You go and log some data, and then take out the card and put in the PC, and the PC says it is unreadable and has to be re-formatted. So the entire experiment has to be done over again. This is an annoying problem to track down, it could be a defective card, or a defective reader, or some incompatibility in the FAT version, or an incorrectly terminated file, or a host of other things. I've tried dozens of things to reduce this problem. Opening and closing the file for every write operation seems to work best ( but not perfectly) , but has quite a long latency time which can interfere with other things the Arduino is suppoed to be doing. Part of the problem here, is that Arduino sketches just run forever. There is no orderly way to turn the thing off, unless you implement one somehow. Even if you only open and close the file every time you write to it, you can still cut off the power supply in the middle of the write operation, which may leave the file on the card defective.