Форум сайта python.su
Такая проблема : из базы данных (использую kinterbasdb) вытягивается вещественное число. Реальное число - 5.3, однако в программе оно отображается как 5.299999. В моем случае эта погрешность имеет смысл. Есть ли какой способ заставить возвращать именно 5.3 или, хотя бы, выставить округление?
Офлайн
Используй decimal вместо float.
Офлайн
5.299999 - это что-то похоже на бок интерпретатора, возможно это бред, но проверь на всяк случай:)
Вот что умеет показывать интерпретатор:
>>> 0.1
0.10000000000000001
>>> 5.3
5.2999999999999998
Отредактировано (Авг. 22, 2007 15:08:45)
Офлайн
Можно округлить при выводе строки, например как “%.3f” % (5.3)
Офлайн
poltergeistНе совсем. Поле у меня numeric(15, 5). Kinterbasdb отдает строку “2.03999” вместо “2.04”. Хотя корень в том, что вы описали. Вот и пришлось округлять.
Если в этом бок, то вот ещё почитать: http://docs.python.org/tut/node16.html# … 0000000000
JenyayЭто наилучшее решение. Decimal работает, но часто выдает результат в экспоненциальной форме и не понравился он мне.
Можно округлить при выводе строки, например как “%.3f” % (5.3)
Отредактировано (Авг. 23, 2007 11:12:26)
Офлайн
str вполне нормально округляет число, в отличии от repr.
Например:
>>> str(0.23)
'0.23'
>>> repr(0.23)
'0.23000000000000001'
Офлайн
ViperА у меня str. Это kinterbasdb страдает…
str вполне нормально округляет число, в отличии от repr.
Офлайн
Есть еще fpformat.fix. Хоть он и ограниченный несколько
Офлайн
balu
Я так понял, что вы получаете данные в строковом виде и выводить тоже должны также, но красиво.
Как-то всё громоздко у вас, может так:
def formatFloat(number, scale=2):
return str(round(float(number), scale))
Вот пример:
>>> formatFloat(“234.2359999999998”, 5)
'234.236'
Офлайн
poltergeistСпасибо. за round я как-то запямятовал :(
Как-то всё громоздко у вас, может так
Отредактировано (Авг. 23, 2007 16:17:38)
Офлайн