부동 소수점 값을 자르거나 지정된 소수 자릿수를 초과하는 숫자를 제거하는 것은 프로그래밍에서 일반적인 작업입니다. 그러나 부동 소수점 표현의 한계로 인해 반올림 없이 정확한 잘림을 달성하는 것이 어려울 수 있습니다.
다음 예를 고려하세요.
1.923328437452 -> 1.923
순진한 접근 방식은 부동 소수점을 문자열로 변환하고 자르는 것이지만 부동 소수점 표현의 부정확한 특성으로 인해 오류가 발생할 수 있습니다. 서로 다른 부동 소수점 값은 동일한 이진 표현을 가질 수 있으므로 모호한 잘림이 발생할 수 있습니다.
Python 버전 2.7 이상의 경우 다음 함수는 반올림 없이 정확한 잘림을 제공합니다.
def truncate(f, n): '''Truncates/pads a float f to n decimal places without rounding''' s = '{}'.format(f) if 'e' in s or 'E' in s: return '{0:.{1}f}'.format(f, n) i, p, d = s.partition('.') return '.'.join([i, (d+'0'*n)[:n]])
이 방법의 핵심은 '{}'.format(f)을 사용하여 부동 소수점을 문자열로 변환하고 문자열을 원하는 소수 자릿수로 자르는 것입니다. 과학 표기법('e' 또는 'E') 값의 경우 '{0:.{1}f}'.format(f, n) 구문을 사용하여 정밀도를 지정합니다.
드물게 어림수에 매우 가까운 부동소수가 여전히 잘못 잘릴 수 있습니다. 이러한 경우 문자열 변환 중 반올림이 결과에 영향을 미치지 않도록 더 높은 정밀도를 지정하십시오.
2.7 미만의 Python 버전의 경우 덜 정확한 방법에는 반올림이 포함됩니다. 소수점 이하 12자리까지 잘라내기:
def truncate(f, n): '''Truncates/pads a float f to n decimal places without rounding''' s = '%.12f' % f i, p, d = s.partition('.') return '.'.join([i, (d+'0'*n)[:n]])
이 코드는 반올림 없이 float 값을 잘라내는 강력한 솔루션을 제공하여 광범위한 입력에 대해 정확한 잘라내기를 보장합니다.
위 내용은 반올림하지 않고 부동 소수점 값을 정확하게 자르는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!