Python умножение эквивалентно целочисленному делению - PullRequest
1 голос
/ 27 января 2020

В python при использовании // для деления результат получается целым числом. Есть ли эквивалент для умножения?

Например, предположим, у меня есть целое число W, которое я масштабирую на число с плавающей точкой f. Было бы неплохо иметь такой оператор, как .*, чтобы:

int(W*f)==W.*f

было бы True.

Ответы [ 2 ]

3 голосов
/ 27 января 2020

Нет, и вряд ли он будет добавлен по двум причинам.

  • Текущие параметры являются короткими и встроенными
  • Нет неопределенности, которая должна быть разрешена

Когда вы берете 12/5, вы можете разумно хотеть целое, частное или вещественное, все из которых хорошо определены, принимают разные значения в python (без бесконечной плавающей точности) и ведут себя по-разному.

Когда вы умножаете 12 * 5, вы также можете захотеть эти три, но значение будет одинаковым.

Для чего-то вроде pi * 100000 вам потребуется знать тип, чтобы в итоге получилось с помощью метода разрешения, например, с плавающей точкой на целое число (пол, потолок, ближайший раунд, круглый .5 вверх, круглый .5 вниз, округление банкиров). Без сильных типов это становится беспорядком для передачи сверху и проще для делегирования пользователю и его собственным потребностям или предпочтениям.

0 голосов
/ 27 января 2020

// не «заставляет результат быть целым числом», это может быть совпадением по правде, но описание оператора таким самонадеянным способом (я считаю) приводит к тому, что вы думаете, что должны быть другие аналогичные функции, которые там действительно нет. // - это «разделение по полу», которое любой тип может перегрузить, чтобы иметь любое желаемое поведение. Оператора "умножение по полу" нет. Если вы хотите, чтобы результат умножения был принудительно установлен в целое число, вы уже показали вполне приемлемый и простой способ сделать это:

int(W*f)
...