Хотя CMS верна , что передача строк в метод разбора, как правило, небезопасна, новая спецификация ECMA-262 5th Edition (aka ES5) в разделе 15.9.4.2 предлагает что Date.parse()
фактически должны обрабатывать даты в формате ISO. В старой спецификации не было такого требования. Конечно, старые браузеры и некоторые современные браузеры по-прежнему не обеспечивают эту функциональность ES5.
Ваш второй пример не является неправильным. Это указано в UTC, что подразумевается Date.prototype.toISOString()
, но отображается в вашем локальном часовом поясе.
Я не могу помочь способу, которым это хранится, но по крайней мере форматирующие работы правильно:
'%.1f' % round(n, 1) # Gives you '5.6'
printf сосунок.
print '%.1f' % 5.59 # returns 5.6
Математические операции с плавающей точкой уязвимы для небольших, но раздражающих, погрешностей точности. Если можно работать с целочисленной или фиксированной точкой, Вам гарантируют точность.
Можно использовать оператор %
формата строки, подобный sprintf.
mystring = "%.2f" % 5.5999
Можно переключить тип данных на целое число:
>>> n = 5.59
>>> int(n * 10) / 10.0
5.5
>>> int(n * 10 + 0.5)
56
И затем отображают число путем вставки десятичного разделителя локали.
Однако ответ Jimmy лучше.
Вы добираетесь '5.6', если Вы делаете str(round(n, 1))
вместо всего round(n, 1)
.
round(5.59, 1)
хорошо работает. Проблема состоит в том, что 5.6 не может быть представлен точно в двоичной плавающей точке.
>>> 5.6
5.5999999999999996
>>>
, Поскольку Vinko говорит, можно использовать строковое форматирование, чтобы сделать округление для дисплея.
Python имеет модуль для десятичной системы исчисления при необходимости в этом.
Форматирование работ правильно даже, не имея необходимость к раунду:
"%.1f" % n
Взгляните на модуль Decimal.
Decimal «основан на числах с плавающей запятой. модель, которая была разработана с людьми в уме и обязательно имеет первостепенный руководящий принцип - компьютеры должны обеспечивать арифметику это работает так же, как арифметика, которую люди изучают школа." - отрывок из десятичной дроби арифметическая спецификация.
и
Десятичные числа могут быть представлены точно. Напротив, числа вроде 1.1 и 2.2 не имеют точного представления в двоичном формате с плавающей запятой точка. Конечные пользователи обычно не ожидайте, что 1.1 + 2.2 будет отображаться как 3.3000000000000003, как и с двоичной плавающей запятой.
Decimal предоставляет такие операции, которые упрощают написание приложений, требующих операций с плавающей запятой, а также должны представлять эти результаты в удобочитаемом формате, например, в бухгалтерском учете.