부서가 떠 다니는 포인트가되도록하려면 어떻게해야합니까? 디비전은 계속 반올림을 0으로 내려가고 있습니까?

StackOverflow https://stackoverflow.com/questions/1267869

문제

나는 두 개의 정수 값이 있습니다 a 그리고 b, 그러나 나는 부동 소수점에서 그들의 비율이 필요합니다. 나는 그것을 알고있다 a < b 그리고 계산하고 싶습니다 a / b, 정수 부서를 사용하면 나머지는 항상 0을 얻을 수 있습니다. a.

어떻게 강요 할 수 있습니까? c 다음에서 파이썬의 부동 소수점 번호가 되려면?

c = a / b
도움이 되었습니까?

해결책

Python 2에서 두 개의 int의 분할은 int를 생성합니다. Python 3에서는 플로트를 생성합니다. 우리는 가져 오면 새로운 행동을 얻을 수 있습니다 __future__.

>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663

다른 팁

당신은 캐스트를 통해 캐스트 할 수 있습니다 c = a / float(b). 분자 또는 분모가 플로트 인 경우 결과도 있습니다.


경고 : 의견 제시 자들이 지적했듯이 이것은 효과가 없습니다. b 정수 또는 부동 소수점 번호 (또는 문자열을 나타내는 문자열)가 아닌 것일 수 있습니다. 다른 유형 (예 : 복소 번호)을 처리하는 경우 그 유형을 확인하거나 다른 방법을 사용해야합니다.

파이썬의 부유 포인트가되도록하는 방법은 무엇입니까?

나는 두 개의 정수 값 a와 b를 가지고 있지만 부동 소수점에서 그들의 비율이 필요합니다. 나는 a <b와 a/b를 계산하고 싶다는 것을 알고 있으므로 정수 부서를 사용하면 나머지 a로 항상 0을 얻을 수 있습니다.

다음에서 C가 파이썬의 부동 소수점 번호가되도록하려면 어떻게해야합니까?

c = a / b

여기서 실제로 묻는 것은 다음과 같습니다.

"어떻게 진정한 분열을 강요합니까? a / b 분수를 반환할까요? "

Python 3으로 업그레이드

Python 3에서는 진정한 부서를 얻으려면 단순히 a / b.

>>> 1/2
0.5

정수의 고전적인 부문 행동 인 Floor Division은 이제 a // b:

>>> 1//2
0
>>> 1//2.0
0.0

그러나 Python 2를 사용하여 붙어 있거나 2와 3 모두에서 작동 해야하는 코드를 작성할 수 있습니다.

Python 2를 사용하는 경우

Python 2에서는 그렇게 간단하지 않습니다. 클래식 Python 2 부서를 다루는 몇 가지 방법은 다른 것보다 더 좋고 강력합니다.

파이썬 2에 대한 권장 사항

주어진 모듈에서 Python 3 Division 동작을 상단에 가져올 수 있습니다.

from __future__ import division

그런 다음 Python 3 Style Division을 전체 모듈에 적용합니다. 또한 주어진 지점에서 파이썬 쉘에서도 작동합니다. Python 2에서 :

>>> from __future__ import division
>>> 1/2
0.5
>>> 1//2
0
>>> 1//2.0
0.0

이것은 모듈의 코드가 Python 3과 더 호환되도록하기 때문에 실제로 가장 좋은 솔루션입니다.

Python 2에 대한 기타 옵션

이를 전체 모듈에 적용하지 않으려면 몇 개의 해결 방법으로 제한됩니다. 가장 인기있는 것은 피연산자 중 하나를 플로트로 강요하는 것입니다. 강력한 솔루션 중 하나입니다 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

Python 2에는 권장되지 않습니다

일반적으로 볼 수 있습니다 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

의도적으로 코드를 더욱 부서럽게 만드는 것은 나에게 큰 의미가 없습니다.

당신은 또한 Python을 실행할 수 있습니다 -Qnew 플래그이지만 이것은 새로운 Python 3 동작으로 모든 모듈을 실행하는 단점이 있으며 일부 모듈은 클래식 부문을 기대할 수 있으므로 테스트를 제외하고는 권장하지 않습니다. 그러나 입증하기 위해 :

$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j
c = a / (b * 1.0)

파이썬 3.x에서 단일 슬래시 (/)는 항상 진실 (비 결론) 부문을 의미합니다. (그만큼 // 연산자는 절단 부문에 사용됩니다.) Python 2.X (2.2 이상)에서는

from __future__ import division

모듈 상단에 있습니다.

부동 소수점 형식으로 분할을위한 매개 변수를 만드는 것만으로도 부동 소수점에서 출력이 생성됩니다.

예시:

>>> 4.0/3
1.3333333333333333

또는,

>>> 4 / 3.0
1.3333333333333333

또는,

>>> 4 / float(3)
1.3333333333333333

또는,

>>> float(4) / 3
1.3333333333333333

도트 추가 (.) 부동 소수점 번호를 나타냅니다

>>> 4/3.
1.3333333333333333

이것은 또한 작동합니다

>>> u=1./5
>>> print u
0.2

기본적으로 "True"(Floating Point) 부서를 사용하려면 명령 줄 플래그가 있습니다.

python -Q new foo.py

(PEP에서) 몇 가지 단점이 있습니다.

기본값을 변경하는 명령 줄 옵션은 사악하다고 주장되었습니다. 예를 들어 -QNEW와 -QOLD가 필요한 다른 파티 라이브러리 패키지와 결합하는 것은 불가능합니다.

Python Man 페이지를 보면서 분할 동작에 대해 변경 / 경고하는 다른 플래그 값에 대해 더 많이 배울 수 있습니다.

부서 변경에 대한 자세한 내용은 다음과 같습니다. PEP 238- 디비전 연산자 변경

from operator import truediv

c = truediv(a, b)
from operator import truediv

c = truediv(a, b)

여기서 A는 배당금이고 B는 제수입니다. 이 기능은 두 정수의 분할 후 몫이 플로트 일 때 편리합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top