logSM
- это указатель на массив, а не массив указателей.
Поскольку logSM
является указателем, мы должны разыменовать его. И поскольку он указывает на массив структурных объектов (экземпляров), мы не можем использовать оператор «стрелка».
Таким образом, использование должно быть похоже на
(*logSM)[*counter].ticks = ticks;
Более «естественное» решение - переопределить псевдоним типа timeLog
, чтобы он был просто самой структурой.
Так что-то вроде
typedef struct
{
int vonWem;
int ticks;
} timeLog;
Тогда вы можете использовать logSM
как любой другой указатель или массив:
logSM[*counter].ticks = ticks;
Я думаю, что это отражается больше над Вашим пониманием типов с плавающей точкой, чем на Python. См. мою статью о числах с плавающей точкой (основанный на.NET, но все еще релевантный) по причинам позади этой "погрешности". Если необходимо сохранить точное десятичное представление, необходимо использовать десятичный модуль.
Это не недостаток Python, скорее это - недостаток способа, которым числа с плавающей точкой хранятся на компьютере. Независимо от языка реализации Вы найдете подобные проблемы.
Вы говорите, что хотите 'отобразиться' как плавающая точка, почему не только отображают строку? Визуально это будет идентично тому, что Вы ожидаете.
Как Jon упомянул, если Ваши потребности больше, чем просто 'отображают' число с плавающей точкой, необходимо использовать десятичный модуль для хранения точного представления.
Превосходные ответы, объясняющие причины. Я просто хочу добавить возможное практическое решение из стандартной библиотеки:
>>> from decimal import Decimal
>>> a = Decimal('2.3')
>>> print a
2.3
Это на самом деле (очень) F.A.Q. для Python, и можно прочитать ответ здесь.