我通过 Python 中的嵌套 for 循环读取了两组数据。我需要使用公共(public)数字(时间)来匹配两个不同文本文件的行。在这两个文件中,时间的写法不同(例如 21:53:28.339 与 121082008.3399)。我只需要时间的最后四位数字来匹配它们,例如从 21:53:28.339 开始,我只需要 '8.339'。在大多数情况下,将数字索引为字符串就可以正常工作(例如:timeList[nid][7:]),除了上面列出的数字等情况,其中 python 将 .3399 舍入为 .34。
有没有办法让数字保持浮点形式并从数据中选择未舍入的数字?
谢谢!
最佳答案
编辑 - 专门使用 Decimal - 完整示例
import decimal
def simplify(text):
# might be a : separated value
text = text.split(':')[-1]
# turn into decimal
number = decimal.Decimal(text)
# remove everything but the ones place and forwards
number = number - (number/10).quantize(1, rounding=decimal.ROUND_FLOOR) * 10
# truncate to the thousandths
return number.quantize(decimal.Decimal('.001'), rounding=decimal.ROUND_FLOOR)
a = '121082008.3399'
b = '21:53:28.339'
assert simplify(a) == simplify(b)
print simplify(a), '=', simplify(b)
斯科特,如果您使用字符串比较数字,那么您不需要任何 float ,也不会进行“舍入”。
'8.339' == '8.339'
或者,如果你有
a = '8.3399'
b = '8.339'
然后
a[:-1] == b
但是,如果您决定将它们作为“数字”使用,那么正如 Ignacio 指出的那样,您可以使用小数。
from decimal import Decimal
number_a = Decimal(a[:-1])
number_b = Decimal(b)
现在
number_a == number_b
希望对你有帮助
关于Python:索引 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5773286/