我有一个unicode字符串x = u'12345678.87654321',我想使用以下命令将其转换为python中的float
float(x)而是将其转换为12345678.88。似乎float()会自动将数字四舍五入到小数点后两位。我想保留unicode字符串中的所有内容(少于10位小数)。什么是一个好的替代方案?
编辑:我的道歉。我使用的示例没有经过测试。我将只使用我的真实数据:我有一个unicode字符串u'1464106296.285190‘。这是一个不能转换为浮点数并保留所有小数位的类型。
发布于 2016-05-25 04:28:09
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发布于 2016-05-25 08:23:09
它可以很好地转换。Python浮点数可以保持大约16位的精度。print在Python2.7中做了一些默认的四舍五入来显示它,但无论采用哪种方式,转换的值都是相同的。您可以格式化该值以更精确地打印。下面是Python3和Python2的例子。注意转换是精确到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.29https://stackoverflow.com/questions/37423185
复制相似问题