Python Decimal to String

后端 未结 5 1688
时光取名叫无心
时光取名叫无心 2021-02-03 18:35

There are tons of topics on here that explain how to convert a string to a decimal, but how do I convert a decimal back to a string?

Like if I did this:

         


        
相关标签:
5条回答
  • 2021-02-03 18:47

    Use the string format function:

    >>> from decimal import Decimal
    >>> d = Decimal("0.0000000000000123123")
    >>> s = '{0:f}'.format(d)
    >>> print(s)
    0.0000000000000123123
    

    If you just type cast the number to a string it won't work for exponents:

    >>> str(d)
    '1.23123E-14' 
    
    0 讨论(0)
  • 2021-02-03 18:50

    Use the str() builtin, which:

    Returns a string containing a nicely printable representation of an object.

    E.g:

    >>> import decimal
    >>> dec = decimal.Decimal('10.0')
    >>> str(dec)
    '10.0'
    
    0 讨论(0)
  • 2021-02-03 18:53

    Almost all the built-ins work on the Decimal class as you would expect:

    >>> import decimal
    >>> dec=decimal.Decimal('10.0')
    

    A string:

    >>> str(dec)
    '10.0'
    

    A float:

    >>> float(dec)
    10.0
    

    An int:

    >>> int(dec)
    10
    

    Object representation (as it would be in the interactive interpreter):

    >>> repr(dec)
    "Decimal('10.0')"
    

    Rational number:

    >>> import fractions
    >>> fractions.Fraction(decimal.Decimal('0.50'))
    Fraction(1, 2)
    
    0 讨论(0)
  • 2021-02-03 18:58
    import decimal
    dec = decimal.Decimal('10.0')
    string_dec = str(dec)
    
    0 讨论(0)
  • 2021-02-03 18:58

    Note that using the %f string formatting appears to either convert to a float first (or only output a limited number of decimal places) and therefore looses precision. You should use %s or str() to display the full value stored in the Decimal.

    Given:

    from decimal import Decimal
    foo = Decimal("23380.06198573179271708683473")
    print("{0:f}".format(foo))
    print("%s" % foo)
    print("%f" % foo)
    

    Outputs:

    23380.06198573179271708683473
    23380.06198573179271708683473
    23380.061986
    

    (ed: updated to reflect @Mark's comment.)

    0 讨论(0)
提交回复
热议问题