IT이야기

어떻게 분단을 부동의 지점으로 강제할 수 있을까?0으로 반올림하는 중인가?

cyworld 2022. 3. 13. 10:39
반응형

어떻게 분단을 부동의 지점으로 강제할 수 있을까?0으로 반올림하는 중인가?

나는 두 개의 정수 값을 가지고 있다.a그리고b하지만 부동 소수점에서의 비율이 필요해그건 나도 알아.a < b그리고 나는 계산하고 싶다.a / b, 그래서 만약 내가 정수분할을 사용한다면 나는 항상 0을 얻을 것이다.a.

어떻게 하면 강요할 수 있을까?c다음 파이썬 2의 부동 소수점 번호로?

c = a / b

파이톤 2에서는 두 개의 int를 나누면 int가 생성된다.파이톤 3에서는 플로트를 생산한다.우리는 다음에서 수입함으로써 새로운 행동을 얻을 수 있다.__future__.

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

하면 떠다닐 수 있다.c = a / float(b) 분자나 분모가 부동이라면 그 결과도 역시 된다.


주의사항: 논평자들이 지적한 바와 같이, 이것은 만약b정수 또는 부동 소수점(또는 하나를 나타내는 문자열)이 아닌 다른 것일 수 있다.복잡한 숫자와 같은 다른 유형을 다룰 경우 해당 유형을 확인하거나 다른 방법을 사용하십시오.

파이썬에서 어떻게 분할을 부동소수 지점으로 강제할 수 있을까?

나는 a와 b의 정수 값을 두 개 가지고 있지만, 부동 소수점에서의 비율이 필요하다.나는 < b와 내가 a/b를 계산하고 싶어한다는 것을 알고 있으므로 정수분할을 사용하면 항상 나머지 a와 함께 0을 얻는다.

다음에 나오는 Python에서 c를 부동 소수점 번호로 강제 적용하려면 어떻게 해야 하는가?

c = a / b

여기서 정말로 묻고 있는 것은 다음과 같다.

"그렇게 참된 분열을 강요하다니.a / b분수를 돌려줄까?"

Python 3으로 업그레이드

파이톤 3에서는 진정한 분열을 위해a / b.

>>> 1/2
0.5

정수의 고전적인 분할 행동인 바닥 분할은 지금이다.a // b:

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

단, 파이톤 2를 사용하여 고착되거나, 2와 3에서 모두 작동해야작성할 수 있다 코드를 하는.

Python 2를 사용하는 경우

파이톤 2에서는 그렇게 간단하지 않다.고전적인 파이썬 2 디비전을 다루는 몇몇 방법들은 다른 방법들보다 더 좋고 더 강력하다.

Python 2에 대한 권장 사항

Python 3 division 동작은 임의의 지정된 모듈에서 확인할 수 있으며, 상단의 가져오기:

from __future__ import division

그런 다음 Python 3 스타일 구분을 전체 모듈에 적용한다.그것은 또한 어느 특정 지점의 비단뱀 껍질에서도 작동한다.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)

Python 3.x에서는 단일 슬래시 (/)는 항상 참(비응시)의 분열을 의미한다.(더)//오퍼레이터는 분할 자르기에 사용된다.)Python 2.x(2.2 이상)에서는 이 같은 동작을 a를 넣음으로써 얻을 수 있다.

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"(부동점) 분할을 사용하려면 다음과 같은 명령줄 플래그가 있다.

python -Q new foo.py

다음과 같은 단점이 있다(PEP:

디폴트를 변경하는 명령줄 옵션이 악의적이라는 주장이 제기됐다.예를 들어 -Qnew를 필요로 하는 타사 라이브러리 패키지와 -Qold를 필요로 하는 다른 라이브러리를 결합하는 것은 불가능할 것이다.

당신은 파이선 맨 페이지를 보면 분단의 행동에 대해 변화/경고하는 다른 플래그 값에 대해 더 많이 배울 수 있다.

분할 변경에 대한 자세한 내용은 PEP 238 - 분할 연산자 변경을 참조하십시오.

from operator import truediv

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

c = truediv(a, b)

여기서 a는 배당이고 b는 배당금이다.이 기능은 두 정수를 나눈 후의 몫이 부동액일 때 유용하다.

참조URL: https://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-division-keeps-rounding-down-to-0

반응형