Причина очень даже понятна. Самодельный и глючный велосипед с квадратными колёсами вместо printf. При переводе в ASCII с фиксированным числом знаков после запятой НЕОБХОДИМО округлять, что в самодельщине не делается. И странно это пытаться исправить где-то в другом месте какими-то магическими числами.