답변:
Python 2에서 두 정수를 나누면 정수가 생성됩니다. 파이썬 3에서는 float를 생성합니다. 에서 가져 와서 새로운 동작을 얻을 수 있습니다 __future__
.
>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663
from __future__ import division
바로 파일의 시작에 있어야합니다은
//
하면 바닥 분열을 할 때, 그리고 /
당신은 "true"를 (할 때 float
) 부문.
파이썬에서 나누기를 강제로 부동 소수점으로 만들려면 어떻게해야합니까?
두 개의 정수 값 a와 b가 있지만 부동 소수점에 비율이 필요합니다. 나는 a <b를 알고 a / b를 계산하고 싶습니다. 따라서 정수 나누기를 사용하면 항상 나머지 a와 함께 0을 얻습니다.
파이썬에서 c를 강제로 부동 소수점 숫자로 만들려면 어떻게해야합니까?
c = a / b
실제로 여기에서 묻는 것은 다음과 같습니다.
" a / b
분수를 반환하는 진정한 나눗셈을 어떻게 강제 합니까?"
파이썬 3에서 진정한 나눗셈을하려면 간단히하세요 a / b
.
>>> 1/2
0.5
정수에 대한 고전적인 분할 동작 인 바닥 분할은 a // b
다음과 같습니다.
>>> 1//2
0
>>> 1//2.0
0.0
그러나 Python 2를 사용하거나 2와 3에서 모두 작동해야하는 코드를 작성하고있을 수 있습니다.
파이썬 2에서는 그렇게 간단하지 않습니다. 고전적인 Python 2 부서를 다루는 몇 가지 방법이 다른 방법보다 낫고 강력합니다.
맨 위에 다음 가져 오기를 사용하여 주어진 모듈에서 Python 3 나누기 동작을 얻을 수 있습니다.
from __future__ import division
그런 다음 Python 3 스타일 나누기를 전체 모듈에 적용합니다. 주어진 시점에서 파이썬 쉘에서도 작동합니다. 파이썬 2에서 :
>>> from __future__ import division
>>> 1/2
0.5
>>> 1//2
0
>>> 1//2.0
0.0
이것은 모듈의 코드가 Python 3과 더 호환되도록하기 때문에 실제로 가장 좋은 솔루션입니다.
이것을 전체 모듈에 적용하지 않으려면 몇 가지 해결 방법으로 제한됩니다. 가장 인기있는 것은 피연산자 중 하나를 플로트로 강제하는 것입니다. 하나의 강력한 솔루션은 a / (b * 1.0)
입니다. 신선한 파이썬 쉘에서 :
>>> 1/(2 * 1.0)
0.5
또한 모듈 truediv
에서 강력 하지만 함수 호출이기 때문에 속도가 느릴 수 있습니다.operator
operator.truediv(a, b)
>>> from operator import truediv
>>> truediv(1, 2)
0.5
일반적으로 볼 수 있습니다 a / float(b)
. b가 복소수 인 경우 TypeError가 발생합니다. 복소수를 갖는 나눗셈이 정의되었으므로 제수의 복소수를 통과했을 때 나눗셈에 실패하지 않는 것이 좋습니다.
>>> 1 / float(2)
0.5
>>> 1 / float(2j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float
의도적으로 코드를 취하기 쉽게 만드는 것은별로 의미가 없습니다.
-Qnew
플래그를 사용하여 Python을 실행할 수도 있지만 이것은 새로운 Python 3 동작으로 모든 모듈을 실행하는 단점이 있으며 일부 모듈은 고전적인 분할을 기대할 수 있으므로 테스트를 제외하고는 권장하지 않습니다. 그러나 입증하기 위해 :
$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j
부동 소수점 형식으로 나누기 위해 매개 변수를 만들면 출력이 부동 소수점으로 생성됩니다.
예:
>>> 4.0/3
1.3333333333333333
또는,
>>> 4 / 3.0
1.3333333333333333
또는,
>>> 4 / float(3)
1.3333333333333333
또는,
>>> float(4) / 3
1.3333333333333333
1.0 + 1/3
나 float(c) + a/b
또는 float(a/b)
당신이 대답에 실망됩니다. python 3 이상을 사용하거나 __future__.division
모듈을 반입하는 것이 좋습니다 (허용 된 답변 참조). 항상 원하는 답변을 얻으십시오. 기존의 분할 규칙은 교묘하고 추적하기 어려운 수학 오류를 생성합니다.
python -c 'a=10; b=3.0; print a/b'
?
a
정수 값 함수의 출력은 예를 들어 if 와 'b'는 무엇입니까? 예, a = len(list1), b = len(list2)
.
float(..)
. 1.0
@Pinochle이 아래 제안한 것처럼을 곱하는 것도 유용 할 수 있다고 생각 합니다.
.
부동 소수점 숫자를 나타 내기 위해 점 ( )을 추가하십시오
>>> 4/3.
1.3333333333333333
float()
변수 중 하나 에서만 사용 하십시오.
이것은 또한 작동합니다
>>> u=1./5
>>> print u
0.2
a
및에 대한 답변을 원합니다 b
.
./
파이썬에서 유효한 소수점 연산자를 사용하여 부동 소수점 나누기를 할 수 있다고 생각했습니다 . 그렇기 때문에 모든 프로그래밍 언어에서 공백을 신중하게 사용하는 것이 좋습니다.
기본적으로 "true"(부동 소수점) 나누기를 사용하려면 명령 행 플래그가 있습니다.
python -Q new foo.py
PEP의 몇 가지 단점이 있습니다.
기본값을 변경하는 명령 행 옵션은 악의적이라고 주장되었습니다. 예를 들어 -Qnew가 필요한 타사 라이브러리 패키지와 -Qold가 필요한 다른 라이브러리 패키지를 결합하는 것은 불가능할 수 있습니다.
파이썬 매뉴얼 페이지를 보면 나누기 동작에 대해 변경 / 경고되는 다른 플래그 값에 대해 자세히 알아볼 수 있습니다.
부서 변경에 대한 자세한 내용은 PEP 238-부서 운영자 변경을 참조하십시오.
from operator import truediv
c = truediv(a, b)
a
int이고 b
float 인 경우 작동하지 않으므로 이상적이지 않습니다 . 같은 줄을 따라 더 나은 솔루션을 수행 from operator import truediv
하고 사용하는 것 truediv(a, b)
입니다.