Could be the gauge, could be the sending unit in the tank. The way they work is the gauge is actually reading voltage. The float in the tank has a potentiometer on it (like a 'volume control') that is a resistor that changes resistance as the float moves up and down. "Full" is one voltage and "empty" is a different voltage (I forget which one is "high" and which one is "low" - but you get the idea). One thing you can do that's at least a partial test on your gauge, is disconnect the wire at the tank (usually they connect near the front middle of the tank) and try it with the ignition on. With the wire disconnected the gauge should read one exteme (either completely full or completely empty) and if you short it to ground it should read the 'other' extreme. If that doesn't happen, suspect the gauge. If it does, then suspect the sending unit inside the tank.