부동값을 인쇄할 때 과학적 표기법을 사용하지 않는 방법은 무엇입니까?
제 코드는 다음과 같습니다.
x = 1.0
y = 100000.0
print x/y
내 지수는 다음과 같이 표시됩니다.1.00000e-05
.
과학적 표기법을 억누르고, 그것을 로 표시할 수 있는 방법은 없을까?0.00001
결과를 문자열로 사용합니다.
최신 버전 사용''.format
(또, 이 명령어 뒤에 있는 자리수를 기억합니다..
표시하는 경우는 부동수의 크기에 따라 다릅니다).다음의 예를 참조해 주세요.
>>> a = -7.1855143557448603e-17
>>> '{:f}'.format(a)
'-0.000000'
위와 같이 기본값은 6자리입니다!이것은 이 예에서는 도움이 되지 않기 때문에, 대신 다음과 같은 것을 사용할 수 있습니다.
>>> '{:.20f}'.format(a)
'-0.00000000000000007186'
갱신하다
Python 3.6부터는 다음과 같이 새로운 포맷된 문자열 리터럴로 이를 단순화할 수 있습니다.
>>> f'{a:.20f}'
'-0.00000000000000007186'
'%f' % (x/y)
스스로 정밀도를 관리해야 합니다.
'%f' % (1/10**8)
는 0만을 표시합니다.
자세한 내용은 문서에 기재되어 있습니다.
또는 Python 3의 경우 동등한 이전 포맷 또는 새로운 스타일 포맷
Python의 새로운 버전(2.6 이후)에서는 를 사용하여 @SilentGhost가 제안한 것을 실현할 수 있습니다.
'{0:f}'.format(x/y)
만약 여러분이 판다를 사용하고 있고 모든 부유물에 대한 과학적 표기법을 금지하고 싶다면, 판다의 옵션을 조정하는 것도 하나의 방법입니다.
import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
위의 답변은 대부분 정밀도를 지정해야 합니다.그러나 불필요한 0을 사용하지 않고 다음과 같이 플로트를 표시하려면 어떻게 해야 합니까?
1
0.1
0.01
0.001
0.0001
0.00001
0.000001
0.000000000001
numpy
에는 다음과 같은 답이 있습니다.
import numpy as np
def format_float(num):
return np.format_float_positional(num, trim='-')
numpy 배열의 경우 suppress 명령을 사용하여 다음과 같이 억제할 수 있습니다.
import numpy as np
np.set_printoptions(suppress=True)
이는 모든 지수에 대해 작동합니다.
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
빌트인을 사용할 수 있습니다.format
기능.
>>> a = -3.42142141234123e-15
>>> format(a, 'f')
'-0.000000'
>>> format(a, '.50f') # Or you can specify precision
'-0.00000000000000342142141234122994048466990874926279'
이건 오이 선장의 답을 이용한 것이지만, 두 가지 추가가 더해진 것입니다.
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
의 경우string
그 후 빌트인 사용float
예를 들어 다음과 같이 변환합니다.print( "%.5f" % float("1.43572e-03"))
답변:0.00143572
SG의 답변 외에 Decimal 모듈도 사용할 수 있습니다.
from decimal import Decimal
x = str(Decimal(1) / Decimal(10000))
# x is a string '0.0001'
구글에서 가장 높은 결과가 나왔기 때문에, 저의 고민에 대한 해결책을 찾지 못하고 여기에 글을 올리겠습니다.플로트 객체의 표시 값 형식을 지정하고 문자열이 아닌 플로트 상태로 유지하려는 경우 다음 솔루션을 사용할 수 있습니다.
부동값이 표시되는 방법을 수정하는 새 클래스를 만듭니다.
from builtins import float
class FormattedFloat(float):
def __str__(self):
return "{:.10f}".format(self).rstrip('0')
는 본인이 할 수 .{:f}
임의의 유효 자리수로 플로트를 표시하는 보다 간단한 솔루션..numpy
이치노
def sig(num, digits=3):
"Return number formatted for significant digits"
if num == 0:
return 0
negative = '-' if num < 0 else ''
num = abs(float(num))
power = math.log(num, 10)
if num < 1:
step = int(10**(-int(power) + digits) * num)
return negative + '0.' + '0' * -int(power) + str(int(step)).rstrip('0')
elif power < digits - 1:
return negative + ('{0:.' + str(digits) + 'g}').format(num)
else:
return negative + str(int(num))
sig(31415.9) = 31415
31400 대신 만약 당신이 원하는 것이 아니라면 얼마든지 코드를 수정하세요.
테스트:
for power in range(-8,8):
num = math.pi * 10**power
print(str(num).ljust(25), sig(num))
3.6.4를 사용했을 때 출력 파일의 숫자가 임의로 과학적 표기법으로 포맷되는 것과 같은 문제가 있었습니다.
fout.write('someFloats: {0:0.8},{1:0.8},{2:0.8}'.format(someFloat[0], someFloat[1], someFloat[2]))
수정하려면 'f'만 추가하면 됩니다.
fout.write('someFloats: {0:0.8f},{1:0.8f},{2:0.8f}'.format(someFloat[0], someFloat[1], someFloat[2]))
3.6(아마도 약간 오래된 3.x와 함께 사용할 수 있을 것) 시점에서는 다음과 같은 솔루션을 제공하고 있습니다.
import locale
locale.setlocale(locale.LC_ALL, '')
def number_format(n, dec_precision=4):
precision = len(str(round(n))) + dec_precision
return format(float(n), f'.{precision}n')
「precision
계산은 과학적 표기법에서 벗어나기 위한 충분한 정밀도를 확보하기 위한 것입니다(기본 정밀도는 6).
dec_precision
인수를 지정하면 소수점에 사용할 정밀도가 추가됩니다.은 「」를 .n
하지 않은 ('0'과 달리).f
포맷)을 클릭합니다. n
또한 소수점 없이 이미 반올림된 정수를 렌더링합니다.
n
「」가 합니다.float
력,, 즉즉입다다 다다다다다다.
같은 문제를 안고 있었습니다만, 랜덤으로 솔루션을 사용하고 있었습니다.
from decimal import Decimal
Decimal(2/25500)
#output:0.00007843137254901961000728982664753630160703323781490325927734375
언급URL : https://stackoverflow.com/questions/658763/how-to-suppress-scientific-notation-when-printing-float-values
'source' 카테고리의 다른 글
j쿼리 날짜/시간 선택기 (0) | 2022.11.16 |
---|---|
JavaScript를 사용하여 문자열에서 문자를 삭제하려면 어떻게 해야 합니까? (0) | 2022.11.16 |
Java에서 INI 파일을 해석하는 가장 쉬운 방법은 무엇입니까? (0) | 2022.11.15 |
MySQL 및 Maria에서 상호 호환되는 가비지 문자열 함수를 생성하는 동안 오류가 발생했습니다.DB (0) | 2022.11.15 |
Composer - 요청된 PHP 확장 mbstring이 시스템에 없습니다. (0) | 2022.11.15 |