Вы сталкиваетесь старая проблема с числами с плавающей точкой, что не все числа могут быть представлены точно. Командная строка просто показывает Вам полную форму с плавающей точкой из памяти.
С представлением с плавающей точкой, Ваша округленная версия является тем же числом. Так как компьютеры являются двоичными, они хранят числа с плавающей точкой как целое число и затем делят его на питание два, таким образом, 13.95 будет представлен подобным способом 125650429603636838 / (2 ** 53).
Числа двойной точности имеют 53 бита (16 цифр) точности, и регулярные плавания имеют 24 бита (8 цифр) точности. тип с плавающей точкой в Python использует двойную точность для хранения значений.
, Например,
>>> 125650429603636838/(2**53)
13.949999999999999
>>> 234042163/(2**24)
13.949999988079071
>>> a=13.946
>>> print(a)
13.946
>>> print("%.2f" % a)
13.95
>>> round(a,2)
13.949999999999999
>>> print("%.2f" % round(a,2))
13.95
>>> print("{0:.2f}".format(a))
13.95
>>> print("{0:.2f}".format(round(a,2)))
13.95
>>> print("{0:.15f}".format(round(a,2)))
13.949999999999999
, Если Вы только после двух десятичных разрядов (для отображения значения валюты, например), тогда у Вас есть несколько лучших вариантов:
isBeforeTheLastItem
isInFrontOfTheLastItem
isTowardsTheFrontOfTheList
Может быть, слишком многословно, но они могут дать вам идеи.
hasFollowingItems? или hasFollowingXXXXs, где XXXX - это любой элемент в вашем списке?
Лично я бы больше всего на свете изменил логику или посмотрел на бизнес-правила, чтобы увидеть, диктуют ли они какое-либо возможное именование.
Поскольку фактическое условие, которое переключает логическое значение, на самом деле является акт быть «последним». Я бы сказал, что переключение логики и наименование ее «IsLastItem» или подобное было бы более предпочтительным методом.
Я бы проголосовал за то, чтобы назвать его IsLast и изменить функциональность. Если это не вариант, я бы оставил имя IsNotLast.
Я согласен с Code Complete (используйте положительные логические имена переменных), я также считаю, что правила созданы для нарушения. Ключ в том, чтобы сломать их только тогда, когда это абсолютно необходимо. В этом случае ни одно из альтернативных имен не так ясно, как имя, которое «нарушает» правило. Так что это один из тех случаев, когда нарушение правила может быть нормальным.
Haskell использует init
для ссылки на все, кроме последнего элемента списка (в основном, обратный tail
); будет ли isInInit
работать, или это слишком непрозрачно?
Как насчет:
hasSiblings
or isFollowedBySiblings (or isFolloedByItems, or isFollowedByOtherItems etc.)
or moreItems
Хотя я думаю, что даже если вы не должны иметь привычки нарушать «правила», иногда лучший способ чего-то добиться - это сделать исключение из (Руководство по полному кодированию), и в вашем случае назовите переменную isNotLast
Две проблемы, о которых стоит подумать
Какова область видимости переменной (другими словами: вы говорите о локальной переменной или поле?)? Локальная переменная имеет более узкую область действия по сравнению с полем. В частности, если переменная используется внутри относительно короткого метода, мне было бы наплевать на ее имя. Когда область видимости велика, именование более важно.
Я думаю, что существует внутренний конфликт в том, как вы обрабатываете эту переменную. С одной стороны, вы говорите «ложь, когда объект стоит последним в списке», с другой стороны, вы также хотите назвать его «inFront». Объект, который (не) последним в списке, мне не кажется, что он (не) inFront. Я бы выбрал isLast.