Изменение десятичного числа без раунда [дубликат]

Если вы хотите только открыть внешние ссылки (ссылки, которые идут на другие сайты), то этот бит JavaScript / jQuery работает хорошо:

$(function(){
    var hostname = window.location.hostname.replace('www.', '');
    $('a').each(function(){
        var link_host = $(this).attr('hostname').replace('www.', '');
        if (link_host !== hostname) {
            $(this).attr('target', '_blank');
        }
    });
});
11
задан 9 June 2009 в 01:29
поделиться

8 ответов

Если вы работаете с суммой валюты, я настоятельно рекомендую вместо этого использовать десятичный класс Python: http://docs.python.org/library/decimal.html

6
ответ дан Dave 17 August 2018 в 14:17
поделиться

Возможно, это поможет вам:

a=315.15321531321
a=a*100
a=int(a)
a=a/100.0
print(a)
315.15

Объяснение: Если вы хотите округлить во втором десятичном разряде, вам необходимо: 1. умножить свой номер на 100; это дает вам 31515.321531321, 2. конвертирует это новое число в целое; int (31515.321531321) дает вам 31515, 3. разделите его на 100.0; 31515 / 100.0, 4. и вы получите правильный ответ; 315.15

Наслаждайтесь!

0
ответ дан eod 17 August 2018 в 14:17
поделиться

Форматирование строк в python 2.x должно сделать это для вас:

>>> print '%.2f' % 315.15321531321
315.15

Это ограничивает представление строки всего двумя десятичными знаками. Обратите внимание, что если вы используете round(315.153215, 2), вы получите другое значение float, которое естественно неточно (или переоценено, в зависимости от того, как вы его смотрите):

>>> round(315.15321531321, 2)
315.14999999999998

Технически round() является правильным, но он не «усекает» результаты по вашему запросу в 315.15. Кроме того, если вы округлите значение, подобное 315.157, оно будет создавать нечто более близкое к 315.16 ... не уверен, что это то, что вы подразумеваете под «усечением».

13
ответ дан Jarret Hardie 17 August 2018 в 14:17
поделиться
  • 1
    и для Python3: формат (315.153321, «.2f») – Nicolas Dumazet 9 June 2009 в 01:41
  • 2
    Интересно, что вчера я прочитал, что Python 3.1rc1 теперь выбирает кратчайшее строковое представление, которое разрешает одно и то же число с плавающей запятой, поэтому ваш второй пример с round () будет печатать 315.15, как ожидалось: docs.python.org/dev/py3k / WhatsNew / & hellip; – Greg Hewgill 9 June 2009 в 01:46
  • 3
    Спасибо, Грег. Я этого не знал. Хорошая дополнительная информация; тем больше я слышу о py3k, тем больше я не могу ждать, чтобы использовать его изо дня в день! – Jarret Hardie 9 June 2009 в 01:49
  • 4
    То же самое касается комментария NicDumZ. – Jarret Hardie 9 June 2009 в 01:50

При работе с типами Decimal и валютой, где сумма должна быть точной, вот что я придумал для усечения до центов (сотых):

amount = Decimal(long(amount * 100)) / Decimal(100)

Немного истории: Я попробовал quantize, но он имеет тенденцию округлять, а не обрезать. И я не мог с чистой совестью использовать дорогие струнные формы для чего-то такого простого. И, наконец, мне не нужны какие-либо проблемы с точностью a la float, поэтому я использую очень специфическое литье, которое, вероятно, будет излишним.

0
ответ дан Neil C. Obremski 17 August 2018 в 14:17
поделиться

Похоже, печать «% .2f» также округляется. Вот код Python, который округляет и обрезает

num = 315.15627
print "rounded   = %.2f" % num
print "truncated = %.2f" % (int(num*100)/float(100))

rounded   = 315.16
truncated = 315.15
7
ответ дан rainerpm 17 August 2018 в 14:17
поделиться

Если вы просто хотите уменьшить его, вы можете использовать флаг форматирования "%f":

value = 315.123123123
print "Value is: %.2f" % value

Если вы хотите действительно отрезать «дополнительные» цифры, сделайте что-то вроде:

from math import trunc
value = trunc(value*100)/100
2
ответ дан sth 17 August 2018 в 14:17
поделиться
  • 1
    Вы должны умножить на 100 в круглых скобках и делить после усечения, иначе вы получите только 300. – Joey 9 June 2009 в 01:38
  • 2
    @Johannes: Ты абсолютно прав ... – sth 9 June 2009 в 01:45
  • 3
    И тогда есть встроенный круглый () ... – tzot 10 June 2009 в 23:12

Встроенная функция round():

>>> num = 315.1532153132
>>> round(num, 2)
3.1499999999999998
1
ответ дан Triptych 17 August 2018 в 14:17
поделиться

У вас есть несколько вариантов: вы можете округлить число, используя round (), однако это может привести к некоторым неточностям (например, 315.15 может округлить до 315.150000003). Если вы просто хотите усечь значение float при его отображении, вы можете указать ширину вывода с помощью printf («%. 2f», mynumber). Это, вероятно, лучшее решение, поскольку, не зная больше о вашем конкретном приложении, в целом рекомендуется сохранить всю длину номера для расчета.

1
ответ дан Zxaos 17 August 2018 в 14:17
поделиться
Другие вопросы по тегам:

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