将unicode转换为python float但保留小数位

时间:2016-05-24 20:23:56

标签: python unicode

我有一个unicode字符串x = u'12345678.87654321',我想在python中使用

将其转换为float
float(x)

它转换为12345678.88。好像float()会自动将数字舍入到小数点后两位。我想保留unicode字符串中的任何内容(少于10个小数位)。什么是一个好的选择?

编辑:道歉。我使用的示例未经过测试。我将使用我的真实数据: 我有一个unicode字符串u' 1464106296.285190'。这是无法转换为float并保留所有小数位的那个。

2 个答案:

答案 0 :(得分:8)

使用decimal.Decimal

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