It's probably a bad fuel level sensor.
ACDELCO Part # SK1091
$131.79 on rockauto.com

But I question that due to you saying the range is correct.

Due to that I think it could be a mechanical issue with the gauge itself.