вокруг (), кажется, не округляется правильно

Хотя CMS верна , что передача строк в метод разбора, как правило, небезопасна, новая спецификация ECMA-262 5th Edition (aka ES5) в разделе 15.9.4.2 предлагает что Date.parse() фактически должны обрабатывать даты в формате ISO. В старой спецификации не было такого требования. Конечно, старые браузеры и некоторые современные браузеры по-прежнему не обеспечивают эту функциональность ES5.

Ваш второй пример не является неправильным. Это указано в UTC, что подразумевается Date.prototype.toISOString(), но отображается в вашем локальном часовом поясе.

114
задан martineau 28 September 2019 в 16:43
поделиться

10 ответов

Я не могу помочь способу, которым это хранится, но по крайней мере форматирующие работы правильно:

'%.1f' % round(n, 1) # Gives you '5.6'
97
ответ дан Peter Mortensen 24 November 2019 в 02:31
поделиться

Что относительно:

round(n,1)+epsilon
-4
ответ дан chown 24 November 2019 в 02:31
поделиться

printf сосунок.

print '%.1f' % 5.59  # returns 5.6
3
ответ дан Jason Navarrete 24 November 2019 в 02:31
поделиться

Математические операции с плавающей точкой уязвимы для небольших, но раздражающих, погрешностей точности. Если можно работать с целочисленной или фиксированной точкой, Вам гарантируют точность.

5
ответ дан spoulson 24 November 2019 в 02:31
поделиться

Можно использовать оператор % формата строки, подобный sprintf.

mystring = "%.2f" % 5.5999
3
ответ дан nlucaroni 24 November 2019 в 02:31
поделиться

Можно переключить тип данных на целое число:

>>> n = 5.59
>>> int(n * 10) / 10.0
5.5
>>> int(n * 10 + 0.5)
56

И затем отображают число путем вставки десятичного разделителя локали.

Однако ответ Jimmy лучше.

7
ответ дан Peter Mortensen 24 November 2019 в 02:31
поделиться

Вы добираетесь '5.6', если Вы делаете str(round(n, 1)) вместо всего round(n, 1).

13
ответ дан Tomi Kyöstilä 24 November 2019 в 02:31
поделиться

round(5.59, 1) хорошо работает. Проблема состоит в том, что 5.6 не может быть представлен точно в двоичной плавающей точке.

>>> 5.6
5.5999999999999996
>>> 

, Поскольку Vinko говорит, можно использовать строковое форматирование, чтобы сделать округление для дисплея.

Python имеет модуль для десятичной системы исчисления при необходимости в этом.

20
ответ дан Will Harris 24 November 2019 в 02:31
поделиться

Форматирование работ правильно даже, не имея необходимость к раунду:

"%.1f" % n
100
ответ дан Don Kirkby 24 November 2019 в 02:31
поделиться

Взгляните на модуль Decimal.

Decimal «основан на числах с плавающей запятой. модель, которая была разработана с людьми в уме и обязательно имеет первостепенный руководящий принцип - компьютеры должны обеспечивать арифметику это работает так же, как арифметика, которую люди изучают школа." - отрывок из десятичной дроби арифметическая спецификация.

и

Десятичные числа могут быть представлены точно. Напротив, числа вроде 1.1 и 2.2 не имеют точного представления в двоичном формате с плавающей запятой точка. Конечные пользователи обычно не ожидайте, что 1.1 + 2.2 будет отображаться как 3.3000000000000003, как и с двоичной плавающей запятой.

Decimal предоставляет такие операции, которые упрощают написание приложений, требующих операций с плавающей запятой, а также должны представлять эти результаты в удобочитаемом формате, например, в бухгалтерском учете.

5
ответ дан 24 November 2019 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: