Да не в round дело. Python 2.7 использует другой алгоритм для преобразования float в str. Вот и получается разный вывод для одних и тех же чисел.
Сам round не изменился и работает как и прежде.
def round( num, dig ):
dec = 10**dig
return int(num*dec+0.5)/dec
import sqlite3
con = sqlite3.connect('test.sqlite3')
cur = con.cursor()
cur.execute('create table if not exists test (x)')
cur.execute('insert into test(x) values (?)', (round(4.3111111, 2),))
cur.execute('select * from test')
for row in cur: print row
con.commit()
con.close()
(4.3099999999999996,)
ox@blackstar:~$ sqlite3 test.sqlite3
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from test
...> ;
4.31
sqlite>
IsemКаллиграфическим подчерком выписываем слова гуру:
Вы сами то поняли, что сказали? Вы путаете три вещи: …
Андрей СветловМедитируем над бумажкой три дня и торжественно обещаем никогда не морочить коллегам голову самодельными round.
Вы различаете двоичную запись и текстовое представление для float?
И то, что многие дроби можно записать двумя способами, 4.31 одна из них?
Subideal OxБумажку желательно перед этим хорошенько размять :)
Медитируем над бумажкой три дня и торжественно обещаем никогда не морочить коллегам голову самодельными round.
Subideal Oxи
Это и есть тот самый хваленый питон
Андрей СветловИмеем конфуз.
The disadvantage is that many people found the output to be confusing (mistaking intrinsic limitations of binary floating point representation as being a problem with Python itself).
regallМожет быть дедукции?
Кстати, то что 4.309(9) = 4.31 доказывается методом математической индукции.
Андрей СветловЗначит Конан Дойль ошибся.
Нет, всё же это именно “математическая индукция”: http://ru.wikipedia.org/wiki/%D0%9C%D0% … 0%B8%D1%8F
IsemА парень не сдается! :D Молодец, гасконец. Так держать!
Может быть дедукции?
Subideal OxА что мне еще остается делать?
А парень не сдается! Молодец, гасконец. Так держать!