Я полагаю, что, не найдя стандарт, в котором говорится, что при сравнении float
с double
float
приводится к double
перед сравнением. Числа с плавающей запятой без модификатора считаются double
в C.
Тем не менее, в C нет точного представления 0.1 в числах с плавающей запятой и двойных числах. Теперь использование float дает небольшую ошибку. Использование двойного дает вам еще меньшую ошибку. Теперь проблема в том, что, приведя float
к double
, вы переносите большую ошибку float
. Конечно, теперь они не сравнятся.
Вместо использования (float)0.1
вы можете использовать 0.1f
, что немного приятнее для чтения.
Использовать строки Unicode:
# coding: cp1252
print u"é".capitalize()
# Prints É
Если все, что у вас есть, это 8-битная строка, сначала декодируйте ее в Unicode:
# coding: cp1252
print "é".decode('cp1252').capitalize()
# Prints É
Если вам снова понадобится 8-битная строка, закодируйте его:
# coding: cp1252
print "é".decode('cp1252').capitalize().encode('cp1252')
# Prints É (assuming your terminal is happy to receive cp1252)