Pythonでは、数値型を文字列型に変更するためにはstr()でキャストすればよいが、指数表現のfloatをstr()でキャストすると何だかイケてない結果になった。
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'
この時、str(b)は
'0.00000000000000000000000000000000000000001'
となってほしい。
以下に記載されている関数を使わせていただくと、うまくできた。
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'