<질문>
1324343032.324는 어떻게 받습니까?
아래에서 볼 수 있듯이 다음은 작동하지 않습니다.
>>1324343032.324325235 * 1000 / 1000
1324343032.3243253
>>int(1324343032.324325235 * 1000) / 1000.0
1324343032.3239999
>>round(int(1324343032.324325235 * 1000) / 1000.0,3)
1324343032.3239999
>>str(1324343032.3239999)
'1324343032.32'
<답변1>
추가로 사용할 수 있습니다.float()
당신이 그것을 보존하고 싶다면 주위에float
.
%.3f'%(1324343032.324325235)
<답변2>
다음 함수를 사용하여 숫자를 설정된 소수 자릿수로자를 수 있습니다.
import math
def truncate(number, digits) -> float:
stepper = 10.0 ** digits
return math.trunc(stepper * number) / stepper
용법:
>>> truncate(1324343032.324325235, 3)
1324343032.324
<답변3>
다른 해결책을 찾았습니다 ( "string witchcraft"해결 방법보다 더 효율적이어야합니다).
>>> import decimal
# By default rounding setting in python is decimal.ROUND_HALF_EVEN
>>> decimal.getcontext().rounding = decimal.ROUND_DOWN
>>> c = decimal.Decimal(34.1499123)
# By default it should return 34.15 due to '99' after '34.14'
>>> round(c,2)
Decimal('34.14')
>>> float(round(c,2))
34.14
>>> print(round(c,2))
34.14
<답변4>
이건 어때요:
In [1]: '%.3f' % round(1324343032.324325235 * 1000 / 1000,3)
Out[1]: '1324343032.324'
중복 가능성round() in Python doesn't seem to be rounding properly
[편집하다]
추가 의견이 주어지면 다음을 수행하고 싶을 것입니다.
In : Decimal('%.3f' % (1324343032.324325235 * 1000 / 1000))
Out: Decimal('1324343032.324')
부동 소수점 정확도는 사용자가 원하는 것이 아닙니다.
In : 3.324
Out: 3.3239999999999998
(모든 예제는 Python 2.6.5에 있습니다.)
<답변5>
'% .3f'% (1324343032.324325235)
이 특별한 경우에만 괜찮습니다.
숫자를 조금 변경하면됩니다.
1324343032.324 7 25235
그리고:
'%.3f'%(1324343032.324725235)
당신에게 준다1324343032.325
대신 이것을 시도하십시오.
def trun_n_d(n,d):
s=repr(n).split('.')
if (len(s)==1):
return int(s[0])
return float(s[0]+'.'+s[1][:d])
다른 옵션trun_n_d:
def trun_n_d(n,d):
dp = repr(n).find('.') #dot position
if dp == -1:
return int(n)
return float(repr(n)[:dp+d+1])
또 다른 옵션 (a짧막 한 농담하나)trun_n_d[이것은 '엔'는피및 '디' 이다int] :
def trun_n_d(n,d):
return ( n if not n.find('.')+1 else n[:n.find('.')+d+1] )
trun_n_dPython 2.7 및 Python 3.6 모두에서 원하는 출력을 제공합니다.
trun_n_d (1324343032.324325235,3)보고1324343032.324
마찬가지로,trun_n_d (1324343032.324 7 25235,3)보고1324343032.324
참고 1Python 3.6 (및 아마도 Python 3.x)에서는 다음과 같이 잘 작동합니다.
def trun_n_d(n,d):
return int(n*10**d)/10**d
그러나 이런 식으로 둥근 유령은 항상 주변에 숨어 있습니다.
노트 2이와 같은 상황에서파이썬반올림 및 정밀도 부족과 같은의 수 내부엔가지고있다피사용하는 것보다 훨씬 낫습니다int짝; 당신은 항상 당신의 번호를흙손끝에.
<답변6>
십진 모듈을 사용하십시오. 그러나 수레를 사용해야하고 여전히 주어진 소수점 수로 강제 변환하여 문자열로 변환하는 경우 등은 (다소 서투른) 방법을 제공합니다.
>>> q = 1324343032.324325235 * 1000 / 1000
>>> a = "%.3f" % q
>>> a
'1324343032.324'
>>> b = float(a)
>>> b
1324343032.324
그래서:
float("%3.f" % q)
<답변7>
나는format
기능은 나쁜 생각입니다. 아래를 참조하십시오. 값을 반올림합니다. 저는 Python 3.6을 사용합니다.
>>> '%.3f'%(1.9999999)
'2.000'
대신 정규식을 사용하십시오.
>>> re.match(r'\d+.\d{3}', str(1.999999)).group(0)
'1.999'
<답변8>
Almo의 링크 설명왜이런 일이 발생합니다. 문제를 해결하려면decimal library.
<답변9>
아마도 이렇게 :
def myTrunc(theNumber, theDigits):
myDigits = 10 ** theDigits
return (int(theNumber * myDigits) / myDigits)
<답변10>
좋아요, 이것은 숫자에 대해 문자열로 작업하고 간단한 조각을 수행하는이 문제를 해결하는 또 다른 방법입니다. 이것은 당신에게잘림반올림 대신 숫자의 출력.
num = str(1324343032.324325235)
i = num.index(".")
truncated = num[:i + 4]
print(truncated)
산출:
'1324343032.324'
물론 다음을 구문 분석 할 수 있습니다.
float(truncated)
<답변11>
Python 3 모듈이나 추가 수학적 연산을로드하지 않고이 문제를 해결할 방법을 찾은 후 str.format () e .float () 만 사용하여 문제를 해결했습니다. 이 방법은 대부분의 commom 솔루션에서와 같이 다른 수학적 연산을 사용하는 것보다 빠릅니다. 매우 큰 데이터 세트로 작업하기 때문에 빠른 솔루션이 필요했습니다.
def truncate_number(f_number, n_decimals):
strFormNum = "{0:." + str(n_decimals+5) + "f}"
trunc_num = float(strFormNum.format(f_number)[:-5])
return(trunc_num)
# Testing the 'trunc_num()' function
test_num = 1150/252
[(idx, truncate_number(test_num, idx)) for idx in range(0, 20)]
다음 출력을 반환합니다.
[(0, 4.0),
(1, 4.5),
(2, 4.56),
(3, 4.563),
(4, 4.5634),
(5, 4.56349),
(6, 4.563492),
(7, 4.563492),
(8, 4.56349206),
(9, 4.563492063),
(10, 4.5634920634),
(11, 4.56349206349),
(12, 4.563492063492),
(13, 4.563492063492),
(14, 4.56349206349206),
(15, 4.563492063492063),
(16, 4.563492063492063),
(17, 4.563492063492063),
(18, 4.563492063492063),
(19, 4.563492063492063)]
<답변12>
다음을 사용할 수도 있습니다.
import math
nValeur = format(float(input('Quelle valeur ? ')), '.3f')
Python 3.6에서는 작동합니다.
<답변13>
a = 1.0123456789
dec = 3 # keep this many decimals
p = 10 # raise 10 to this power
a * 10 ** p // 10 ** (p - dec) / 10 ** dec
>>> 1.012
<답변14>
가장 좋고 적절한 방법은decimal
기준 치수.
import decimal
a = 1324343032.324325235
decimal_val = decimal.Decimal(str(a)).quantize(
decimal.Decimal('.001'),
rounding=decimal.ROUND_DOWN
)
float_val = float(decimal_val)
print(decimal_val)
>>>1324343032.324
print(float_val)
>>>1324343032.324
다른 값을 사용할 수 있습니다.rounding=decimal.ROUND_DOWN
, 사용 가능한 옵션은 다음과 같습니다.ROUND_CEILING
,ROUND_DOWN
,ROUND_FLOOR
,ROUND_HALF_DOWN
,ROUND_HALF_EVEN
,ROUND_HALF_UP
,ROUND_UP
, 및ROUND_05UP
. 각 옵션에 대한 설명을 찾을 수 있습니다.here in docs.
<답변15>
이 질문 이후 파이썬이 변경되었을 수 있습니다. 아래의 모든 것이 잘 작동하는 것 같습니다.
Python2.7
int(1324343032.324325235 * 1000) / 1000.0
float(int(1324343032.324325235 * 1000)) / 1000
round(int(1324343032.324325235 * 1000) / 1000.0,3)
# result for all of the above is 1324343032.324
<답변16>
다음 해결책을 제안합니다.
def my_floor(num, precision):
return f'{num:.{precision+1}f}'[:-1]
my_floor(1.026456,2) # 1.02
<답변17>
5에서 7 사이의 난수를 생성하고 소수점 3 자리로 제한하고 싶습니다.
import random
num = float('%.3f' % random.uniform(5, 7))
print (num)
<답변18>
def truncate(number: float, digits: int) -> float:
pow10 = 10 ** digits
return number * pow10 // 1 / pow10
f1 = 1.2666666
f2 = truncate(f1, 3)
print(f1, f2)
1.2666666 1.266
변화한다f1
번호digits
시간을 왼쪽으로 이동 한 다음 모든 소수를 잘라 내고 마지막으로 숫자를 뒤로 이동합니다.digits
오른쪽으로 시간.
시퀀스의 예 :
1.2666666 # number
1266.6666 # number * pow10
1266.0 # number * pow10 // 1
1.266 # number * pow10 // 1 / pow10
<답변19>
좋은 솔루션을 개발하고 있습니다.If
하지만 작동합니다! (<1 숫자에만 해당)
def truncate(number, digits) -> float:
startCounting = False
if number < 1:
number_str = str('{:.20f}'.format(number))
resp = ''
count_digits = 0
for i in range(0, len(number_str)):
if number_str[i] != '0' and number_str[i] != '.' and number_str[i] != ',':
startCounting = True
if startCounting:
count_digits = count_digits + 1
resp = resp + number_str[i]
if count_digits == digits:
break
return resp
else:
return number
<답변20>
>>> float(1324343032.324325235) * float(1000) / float(1000)
1324343032.3243253
>>> round(float(1324343032.324325235) * float(1000) / float(1000), 3)
1324343032.324
'개발 > Python' 카테고리의 다른 글
Python3의 BaseHTTPServer 또는 http.server (0) | 2021.04.21 |
---|---|
파이썬 문자열이 변경 불가능한 이유는 무엇입니까? (0) | 2021.04.21 |
Python 함수 포인터 (0) | 2021.04.20 |
[파이썬] crontab에 대해 virtualenv를 설정하는 방법은 무엇입니까? (0) | 2021.04.20 |