En Python, pour changer le type numérique en type chaîne, vous pouvez le convertir avec str (), mais lorsque vous transtypez le flottant de l'expression exponentielle avec str (), le résultat n'est pas cool.
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 0.1
>>> str(a)
'0.1'
>>> b = 0.00000000000000000000000000000000000000001
>>> str(b)
'1e-41'
À ce moment, str (b) '0.00000000000000000000000000000000000000001' Je veux que tu deviennes.
J'ai pu bien le faire en utilisant les fonctions décrites ci-dessous.
[Référence] https://stackoverflow.com/questions/38847690/convert-float-to-string-in-positional-format-without-scientific-notation-and-fa/38983595#38983595
def float_to_str(f):
float_string = repr(f)
if 'e' in float_string: # detect scientific notation
digits, exp = float_string.split('e')
digits = digits.replace('.', '').replace('-', '')
exp = int(exp)
zero_padding = '0' * (abs(int(exp)) - 1) # minus 1 for decimal point in the sci notation
sign = '-' if f < 0 else ''
if exp > 0:
float_string = '{}{}{}.0'.format(sign, digits, zero_padding)
else:
float_string = '{}0.{}{}'.format(sign, zero_padding, digits)
return float_string
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 0.1
>>> str(a)
'0.1'
>>> b = 0.00000000000000000000000000000000000000001
>>> str(b)
'1e-41'
>>> def float_to_str(f):
... float_string = repr(f)
... if 'e' in float_string: # detect scientific notation
... digits, exp = float_string.split('e')
... digits = digits.replace('.', '').replace('-', '')
... exp = int(exp)
... zero_padding = '0' * (abs(int(exp)) - 1) # minus 1 for decimal point in the sci notation
... sign = '-' if f < 0 else ''
... if exp > 0:
... float_string = '{}{}{}.0'.format(sign, digits, zero_padding)
... else:
... float_string = '{}0.{}{}'.format(sign, zero_padding, digits)
... return float_string
...
>>> float_to_str(b)
'0.00000000000000000000000000000000000000001'
Recommended Posts