필자는 사람이 디스플레이 할 수 있도록 부동 소수점 숫자를 사용자가 포맷하는 것을 다루는 일부 인 코드를 다루고 있습니다.파이썬 포맷 스트링과 부동 소수점 표현
현재 구현에서이 작업을 수행합니다 :
의미가 및 대부분의 경우 잘 작동"{0:.24f}".format(some_floating_point).rstrip('0')
. 그러나 0.0003
과 같은 값에 직면했을 때 상황이 나아지지 않습니다.
>>> "{0:.24f}".format(0.0003).rstrip('0')
'0.000299999999999999973719'
추가 조사 결과에 따르면 파이썬은 요청한 자릿수에 따라 기본 표현을 변경하는 것으로 보입니까?
>>> "{0:.15f}".format(0.0003)
'0.000300000000000'
>>> "{0:.20f}".format(0.0003)
'0.00029999999999999997'
내 가정은 단 정밀도 대 double입니다.
사용자는 데이터베이스에 저장된 값을 double로 입력하고 양식이 나중에 다시 렌더링 될 때 같은 값이 필드에 미리 채워집니다. 따라서 이러한 표현의 1 : 1 매핑이 필요합니다.
내 질문에 대한 대답은 다음과 같습니다.이 문제를 해결하기 위해 우아하고 더 중요한 것은 무엇입니까? 지금까지의 최선의 노력은 log10과 관련되어 있으며 멋지게 배치하는 데 이상적이지 않습니다.
편집 : Prune은 값이 실제로 변경되지는 않지만 형식에 의한 반올림은 9s가 0이되도록 수행합니다 (오). 그 행동은 의미가 있지만 솔루션은 여전히 나를 벗어나고 있습니다.
이에 대한 우아한 해결책이 없다, 그것은 기본이 내가 대답을 제공 할 수있는베이스 (10)의 차이에 내재하지만 너무 LOG10을 필요로 - 당신이 자리의 수를 제한 할 필요가 double 형에 격납 된 유효 자리수의 1보다 작은 형식 –