Доказательство Collatz возвращает десятичные числа вместо целого (python) [duplicate]

Вы можете использовать следующий метод утилиты -

public static double round(double valueToRound, int numberOfDecimalPlaces)
{
    double multipicationFactor = Math.pow(10, numberOfDecimalPlaces);
    double interestedInZeroDPs = valueToRound * multipicationFactor;
    return Math.round(interestedInZeroDPs) / multipicationFactor;
}
159
задан Skurmedel 15 August 2009 в 22:51
поделиться

4 ответа

Взгляните на PEP-238 : изменение оператора разделения

Оператор // будет иметь возможность запросить разделение по полу однозначно.

< / BLOCKQUOTE>
215
ответ дан Brandon E Taylor 22 August 2018 в 22:12
поделиться
  • 1
    @JonathanSternberg, за исключением всего кода, написанного для python 2.0. Я чувствую, что роль / и // должна быть отменена, чтобы сохранить обратную совместимость. Кроме того, в большинстве случаев любой другой язык / сохраняет тип. я бы сделал больше смысла, чем // для автоматического преобразования в float, а не /. – thang 11 September 2017 в 20:22

В принятом ответе уже упоминается PEP 238 . Я просто хочу добавить быстрый взгляд за кулисы для тех, кто интересуется тем, что происходит, не читая весь PEP.

Python отображает такие операторы, как +, -, * и / к специальным функциям, например, a + b эквивалентен

a.__add__(b)

Что касается деления в Python 2, по умолчанию используется только /, который отображается на __div__, и результат зависит от типов ввода (например, int , float).

В Python 2.2 была введена функция __future__ division, которая изменила семантику деления следующим образом (TL; DR из PEP 238):

  • / отображается на __truediv__, который должен «возвращать разумную аппроксимацию математического результата деления» (цитата из PEP 238)
  • // отображается на __floordiv__, которая должна возвращаться польский результат /

С Python 3.0 изменения PEP 238 стали поведением по умолчанию, и в объектной модели Python не существует особого метода __div__.

Если вы хотите использовать тот же код в Python 2 и Python 3, используйте

from __future__ import division

и придерживайтесь семантики PEP 238 / и //.

19
ответ дан code_onkel 22 August 2018 в 22:12
поделиться

Надеюсь, что это может помочь кому-то мгновенно.

Поведение оператора разделения в Python 2.7 и Python 3

В Python 2.7: По умолчанию оператор разделения возвращает целочисленный вывод .

, чтобы получить результат в double multiple 1.0 для «divend или divisor»

100/35 => 2 #(Expected is 2.857142857142857)
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857

В Python 3

// => used for integer output
/ => used for double output

100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0    # floating-point result if divsor or dividend real
51
ответ дан Jonas Byström 22 August 2018 в 22:12
поделиться
  • 1
    Спасибо за Ваш ответ. Конечно, это помогает мне :) – user 4 July 2017 в 03:07
  • 2
    Не могли бы вы уточнить? – dangonfast 9 October 2017 в 08:13
  • 3
    Используя это, вы получите int, а не float @dangonfast. – Ashish Ahuja 21 May 2018 в 05:02
  • 4
    Кстати, не нужно умножать на 1,0. Достаточно того, что одно из чисел является поплавком. Например, 100 / 35,0 = 100,0 / 35 = 2,857142857142857 – Tal J. Levy 8 October 2018 в 09:26
[g0] Упс, немедленно найден public abstract IBox createBox();. [/g0]
51
ответ дан Jonas Byström 5 November 2018 в 19:37
поделиться
Другие вопросы по тегам:

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