python比较运算符不工作,如果浮点(1)>;float(1)的计算结果为True,我缺少什么?
不完全是1>1,而是接近: 我想比较两个时间戳,如果time>timestamp的计算结果为python比较运算符不工作,如果浮点(1)>;float(1)的计算结果为True,我缺少什么?,python,floating-point,comparison,floating-point-precision,Python,Floating Point,Comparison,Floating Point Precision,不完全是1>1,而是接近: 我想比较两个时间戳,如果time>timestamp的计算结果为True,则执行一些操作。 这两个变量都具有相同的浮点值,如pdb中所示 (Pdb) print time 1396836917.98 (Pdb) print last_timestamp 1396836917.98 (Pdb) if time > last_timestamp: print 'wtf' wtf 我预计这将评估为False,这似乎是一个浮动问题: (Pdb) if float(ti
True
,则执行一些操作。
这两个变量都具有相同的浮点值
,如pdb中所示
(Pdb) print time
1396836917.98
(Pdb) print last_timestamp
1396836917.98
(Pdb) if time > last_timestamp: print 'wtf'
wtf
我预计这将评估为False
,这似乎是一个浮动问题:
(Pdb) if float(time) > float(last_timestamp): print 'wtf'
wtf
int
比较工作正常
(Pdb) if int(time) > int(last_timestamp): print 'wtf'
因此,我预计代表数字的可用位的精度会出现问题
(Pdb) if float(time)*100 > float(last_timestamp)*100: print 'wtf'
wtf
但如果没有小数点,它仍然计算为True
我现在的工作是
if int(time*100) > int(last_timestamp*100): print 'wtf'
但是我很想了解发生了什么,以及如何将
操作符正确地与float
结合使用。您使用的是哪种版本的Pythonprint
隐式调用str
,在较早版本的Python中,它可以隐藏不同浮点之间的差异。请尝试打印repr(时间)
和repr(上次时间戳)
。如果浮动是不同的,repr
将为它们生成不同的字符串。您使用的是哪个版本的Pythonprint
隐式调用str
,在较早版本的Python中,它可以隐藏不同浮点之间的差异。请尝试打印repr(时间)
和repr(上次时间戳)
。如果浮动是不同的,repr
将为它们生成不同的字符串。您使用的是哪个版本的Pythonprint
隐式调用str
,在较早版本的Python中,它可以隐藏不同浮点之间的差异。请尝试打印repr(时间)
和repr(上次时间戳)
。如果浮动是不同的,repr
将为它们生成不同的字符串。您使用的是哪个版本的Pythonprint
隐式调用str
,在较早版本的Python中,它可以隐藏不同浮点之间的差异。请尝试打印repr(时间)
和repr(上次时间戳)
。如果浮点数是不同的,repr
将为它们生成不同的字符串。这听起来像是一个理解浮点数的问题
基本上除了某些罕见的数字外,浮点数并不准确地存储数字,它们存储的数字与您认为看到的数字略有不同。例如(1-0.8!=0.2)
这是我写的一封关于Java的电子邮件,但实际上所有语言都有相同的行为:
尝试用Java计算(int)(4.1-0.1)(以及使用标准IEE浮点算法和截断整数转换的任何其他方法),得到的结果是3
有关更多示例,请参见:
如果将double转换为float,则会得到一组完全不同的值,这些值是错误的,但例如(int)(4.2f-0.2f)会给出错误的结果
对于SQL,您可以说明同样的事情:
select CONVERT(INTEGER, CONVERT(float, 4.1)-CONVERT(float, 0.1))
这给出了3的结果。这听起来像是一个浮点理解问题
基本上除了某些罕见的数字外,浮点数并不准确地存储数字,它们存储的数字与您认为看到的数字略有不同。例如(1-0.8!=0.2)
这是我写的一封关于Java的电子邮件,但实际上所有语言都有相同的行为:
尝试用Java计算(int)(4.1-0.1)(以及使用标准IEE浮点算法和截断整数转换的任何其他方法),得到的结果是3
有关更多示例,请参见:
如果将double转换为float,则会得到一组完全不同的值,这些值是错误的,但例如(int)(4.2f-0.2f)会给出错误的结果
对于SQL,您可以说明同样的事情:
select CONVERT(INTEGER, CONVERT(float, 4.1)-CONVERT(float, 0.1))
这给出了3的结果。这听起来像是一个浮点理解问题
基本上除了某些罕见的数字外,浮点数并不准确地存储数字,它们存储的数字与您认为看到的数字略有不同。例如(1-0.8!=0.2)
这是我写的一封关于Java的电子邮件,但实际上所有语言都有相同的行为:
尝试用Java计算(int)(4.1-0.1)(以及使用标准IEE浮点算法和截断整数转换的任何其他方法),得到的结果是3
有关更多示例,请参见:
如果将double转换为float,则会得到一组完全不同的值,这些值是错误的,但例如(int)(4.2f-0.2f)会给出错误的结果
对于SQL,您可以说明同样的事情:
select CONVERT(INTEGER, CONVERT(float, 4.1)-CONVERT(float, 0.1))
这给出了3的结果。这听起来像是一个浮点理解问题
基本上除了某些罕见的数字外,浮点数并不准确地存储数字,它们存储的数字与您认为看到的数字略有不同。例如(1-0.8!=0.2)
这是我写的一封关于Java的电子邮件,但实际上所有语言都有相同的行为:
尝试用Java计算(int)(4.1-0.1)(以及使用标准IEE浮点算法和截断整数转换的任何其他方法),得到的结果是3
有关更多示例,请参见:
如果将double转换为float,则会得到一组完全不同的值,这些值是错误的,但例如(int)(4.2f-0.2f)会给出错误的结果
对于SQL,您可以说明同样的事情:
select CONVERT(INTEGER, CONVERT(float, 4.1)-CONVERT(float, 0.1))
这将在linux2上产生3个结果。Python2.7.5+(默认值,2014年2月27日,19:37:08)[GCC 4.8.1]键入“帮助”、“版权”、“信用”或“许可证”以获取更多信息。
我将给repr()
一个镜头,但我将时间戳收集为string
,所以应该没有区别。repr
。在哪里买不到也没关系