[python] 부동 소수점 값을 인쇄 할 때 과학적 표기법을 억제하는 방법은 무엇입니까?

내 코드는 다음과 같습니다.

x = 1.0
y = 100000.0
print x/y

내 몫은로 표시됩니다 1.00000e-05.

과학적 표기법을 억제하고 다음과 같이 표시하는 방법이
0.00001있습니까? 결과를 문자열로 사용하겠습니다.



답변

'%f' % (x/y)

하지만 당신은 정밀함을 스스로 관리해야합니다. 예를 들어

'%f' % (1/10**8)

0 만 표시합니다.
자세한 내용은 문서에 있습니다

또는 Python 3의 경우 동등한 이전 형식 또는 최신 스타일 형식


답변

최신 버전을 사용합니다 ''.format( .표시하려는 숫자의 수 를 지정해야 함 은 부동 숫자의 크기에 따라 다름). 이 예제를보십시오 :

>>> a = -7.1855143557448603e-17
>>> '{:f}'.format(a)
'-0.000000'

위와 같이 기본값은 6 자리입니다! 이것은 우리의 사례에 도움이되지 않으므로 대신 다음과 같이 사용할 수 있습니다.

>>> '{:.20f}'.format(a)
'-0.00000000000000007186'

최신 정보

Python 3.6부터는 다음과 같이 새로운 형식의 문자열 리터럴 로 단순화 할 수 있습니다 .

>>> f'{a:.20f}'
'-0.00000000000000007186'


답변

최신 버전의 Python (2.6 이상)에서는 ''.format()@SilentGhost가 제안한 것을 달성하는 데 사용할 수 있습니다 .

'{0:f}'.format(x/y)


답변

팬더를 사용 중이고 모든 수레에 대한 과학적 표기법을 억제하려는 경우 다른 옵션은 팬더 옵션을 조정하는 것입니다.

import pandas as pd
pd.options.display.float_format = '{:.2f}'.format


답변

위의 답변의 대부분은 정밀도를 지정해야합니다. 그러나 불필요한 제로없이 다음과 같이 수레를 표시하려면 어떻게해야합니까?

1
0.1
0.01
0.001
0.0001
0.00001
0.000001
0.000000000001

numpy 답이있다 : np.format_float_positional

import numpy as np

def format_float(num):
    return np.format_float_positional(num, trim='-')


답변

이것은 모든 지수에 대해 작동합니다.

def getExpandedScientificNotation(flt):
    str_vals = str(flt).split('e')
    coef = float(str_vals[0])
    exp = int(str_vals[1])
    return_val = ''
    if int(exp) > 0:
        return_val += str(coef).replace('.', '')
        return_val += ''.join(['0' for _ in range(0, abs(exp - len(str(coef).split('.')[1])))])
    elif int(exp) < 0:
        return_val += '0.'
        return_val += ''.join(['0' for _ in range(0, abs(exp) - 1)])
        return_val += str(coef).replace('.', '')
    return return_val


답변

이것은 Cucumber 선장의 답변을 사용 하고 있지만 2 가지가 추가되었습니다.

1) 함수가 과학적이지 않은 표기법 숫자를 얻도록 허용하고 그대로 반환하십시오 (따라서 일부 숫자는 0.00003123 대 3.123e-05이며 여전히 기능이 작동합니다.

2) 음수에 대한 지원이 추가되었습니다. (원래 함수에서 음수는 -1.08904e-05에서 0.0000-108904와 같이 끝납니다)

def getExpandedScientificNotation(flt):
    was_neg = False
    if not ("e" in flt):
        return flt
    if flt.startswith('-'):
        flt = flt[1:]
        was_neg = True
    str_vals = str(flt).split('e')
    coef = float(str_vals[0])
    exp = int(str_vals[1])
    return_val = ''
    if int(exp) > 0:
        return_val += str(coef).replace('.', '')
        return_val += ''.join(['0' for _ in range(0, abs(exp - len(str(coef).split('.')[1])))])
    elif int(exp) < 0:
        return_val += '0.'
        return_val += ''.join(['0' for _ in range(0, abs(exp) - 1)])
        return_val += str(coef).replace('.', '')
    if was_neg:
        return_val='-'+return_val
    return return_val