我正在维护一个 Python 脚本,用于xlrd
从 Excel 电子表格中检索值,然后用它们做各种事情。电子表格中的某些单元格是高精度数字,它们必须保持原样。在检索这些单元格之一的值时,xlrd
给我一个float
例如 0.38288746115497402。
但是,我需要稍后在代码中将此值转换为字符串。执行str(value)
或unicode(value)
将返回类似“0.382887461155”的内容。要求说这是不可接受的;需要保持精度。
到目前为止,我已经尝试了几件事,但没有成功。第一个是使用字符串格式化的东西:
data = "%.40s" % (value)
data2 = "%.40r" % (value)
但两者都产生相同的四舍五入数字“0.382887461155”。
在互联网上搜索 SO 和其他地方有类似问题的人时,一个常见的建议是使用该Decimal
课程。但是我不能改变数据提供给我的方式(除非有人知道一种xlrd
返回小数的秘密方法)。当我尝试这样做时:
data = Decimal(value)
我得到一个TypeError: Cannot convert float to Decimal. First convert the float to a string.
但显然我不能将它转换为字符串,否则我会失去精度。
所以,是的,我愿意接受任何建议——如果有必要,甚至是非常粗俗/粗俗的建议。我对 Python 的经验并不丰富(我自己更像是一个 Java/C# 人),所以如果我在这里有某种基本的误解,请随时纠正我。
编辑:只是想我会补充一点,我正在使用 Python 2.6.4。我认为没有任何正式要求阻止我更改版本;它只需要不要弄乱任何其他代码。