Python 2.7을 사용하여 내 숫자를 10이 아닌 소수 두 자리로 반올림하는 방법은 무엇입니까?
print "financial return of outcome 1 =","$"+str(out1)
답변:
내장 기능 사용 round()
:
>>> round(1.2345,2)
1.23
>>> round(1.5145,2)
1.51
>>> round(1.679,2)
1.68
또는 내장 기능 format()
:
>>> format(1.2345, '.2f')
'1.23'
>>> format(1.679, '.2f')
'1.68'
또는 새로운 스타일의 문자열 형식 :
>>> "{:.2f}".format(1.2345)
'1.23
>>> "{:.2f}".format(1.679)
'1.68'
또는 이전 스타일 문자열 형식 :
>>> "%.2f" % (1.679)
'1.68'
에 대한 도움말 round
:
>>> print round.__doc__
round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number. Precision may be negative.
Decimal("{:.2f}".format(val))
Decimal(format(val, '.2f'))
.
Decimal('123.345').quantize(Decimal('1.00'), rounding=decimal.ROUND_HALF_UP)
합니다 Decimal('123.35')
. 반면 에 123.345의 이진 표현이 123.345보다 작기 때문에 Decimal(format(Decimal('123.345'), '.2f'))
제공 Decimal('123.34')
됩니다.
재무 수치 에 대해 이야기 하고 있으므로 부동 소수점 산술을 사용 하고 싶지 않습니다 . Decimal을 사용하는 것이 좋습니다.
>>> from decimal import Decimal
>>> Decimal("33.505")
Decimal('33.505')
새로운 스타일의 텍스트 출력 형식 format()
(기본값은 반올림) :
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))
financial return of outcome 1 = 33.50
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))
financial return of outcome 1 = 33.52
부동 소수점 부정확으로 인한 반올림 차이를 확인하십시오.
>>> round(33.505, 2)
33.51
>>> round(Decimal("33.505"), 2) # This converts back to float (wrong)
33.51
>>> Decimal(33.505) # Don't init Decimal from floating-point
Decimal('33.50500000000000255795384873636066913604736328125')
재무 가치를 반올림하는 올바른 방법 :
>>> Decimal("33.505").quantize(Decimal("0.01")) # Half-even rounding by default
Decimal('33.50')
다른 트랜잭션에서 다른 유형의 반올림을 사용하는 것도 일반적입니다.
>>> import decimal
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)
Decimal('33.50')
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
Decimal('33.51')
수익률 결과를 시뮬레이션하는 경우 센트 분수를 지불 / 수취하거나 센트 분수에 대한이자를받을 수 없기 때문에 각이자 기간마다 반올림해야 할 수 있습니다. 시뮬레이션의 경우 내재 된 불확실성으로 인해 부동 소수점을 사용하는 것이 일반적이지만 그렇게 할 경우 항상 오류가 있음을 기억하십시오. 따라서 고정이자 투자조차도 이로 인해 수익이 약간 다를 수 있습니다.
를 사용할 수도 있습니다 str.format()
.
>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23
동전 / 정수로 작업 할 때. 115 ($ 1.15에서와 같이) 및 기타 숫자에 문제가 발생합니다.
Integer를 Float로 변환하는 함수가 있습니다.
...
return float(115 * 0.01)
그것은 대부분의 시간 동안 작동했지만 때로는 1.1500000000000001
.
그래서 이렇게 반환하도록 함수를 변경했습니다.
...
return float(format(115 * 0.01, '.2f'))
그러면 반환 1.15
됩니다. Not '1.15'
or 1.1500000000000001
(문자열이 아닌 부동 소수점을 반환)
나는 주로 이것을 게시하고 있으므로 이것이 Google의 첫 번째 결과이기 때문에이 시나리오에서 내가 한 일을 기억할 수 있습니다.
format
f 형식에는 비 문자열이 필요합니다. 그렇지 않은 경우 ValueError가 발생했습니다. 올바른 코드는 다음과 같습니다. format(out1, '.2f')
문자열로 캐스팅하지 않고
round () 함수를 사용하면 올바른 값을 제공하지 않습니다.
원형 (2.735)과 원형 (2.725)을 사용하여 확인할 수 있습니다.
사용하시기 바랍니다
import math
num = input('Enter a number')
print(math.ceil(num*100)/100)
다소 간단한 해결 방법은 먼저 float를 문자열로 변환하고 처음 네 숫자의 하위 문자열을 선택한 다음 마지막으로 하위 문자열을 다시 float로 변환하는 것입니다. 예를 들면 :
>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1
매우 효율적이지는 않지만 간단하고 작동합니다. :)
Decimal
실제로 수행하려는 작업에 따라 정수 또는 s 를 사용할 수 있습니다 .