我有一个unicode字符串x = u'12345678.87654321'
,我想在python中使用
float
float(x)
它转换为12345678.88
。好像float()
会自动将数字舍入到小数点后两位。我想保留unicode字符串中的任何内容(少于10个小数位)。什么是一个好的选择?
答案 0 :(得分:8)
In [103]: import decimal
In [104]: D = decimal.Decimal
In [109]: D(u'1464106296.285190')
Out[109]: Decimal('1464106296.285190')
In [110]: float(u'1464106296.285190')
Out[110]: 1464106296.28519
In [111]: print(D(u'1464106296.285190'))
1464106296.285190
答案 1 :(得分:2)
它转换得很好。 Python浮点数可以保持大约16位数的精度。 print
在Python 2.7中进行了一些默认舍入来显示它,但无论哪种方式转换的值相同。您可以格式化值以打印更高的精度。以下是Python 3和2中的示例。请注意,转换精确到16个位置。
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s=u'1464106296.285190'
>>> f=float(s)
>>> f
1464106296.28519
>>> format(f,'.30f')
'1464106296.285190105438232421875000000000'
>>> print(f)
1464106296.28519
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s=u'1464106296.285190'
>>> f=float(s)
>>> f
1464106296.28519
>>> format(f,'.30f')
'1464106296.285190105438232421875000000000'
>>> print(f)
1464106296.29