基本上,我将一个float转换成一个int,但是我并不总是有期望的值。
下面是我正在执行的代码:
x=2.51分
print("--------- 251.0")
y = 251.0
print(y)
print(int(y))
print("--------- 2.51 * 100")
y = x * 100
print(y)
print(int(y))
print("--------- 2.51 * 1000 / 10")
y = x * 1000 / 10
print(y)
print(int(y))
print("--------- 2.51 * 100 * 10 / 10")
y = x * 100 * 10 / 10
print(y)
print(int(y))
x = 4.02
print("--------- 402.0")
y = 402.0
print(y)
print(int(y))
print("--------- 4.02 * 100")
y = x * 100
print(y)
print(int(y))
print("--------- 4.02 * 1000 / 10")
y = x * 1000 / 10
print(y)
print(int(y))
print("--------- 4.02 * 100 * 10 / 10")
y = x * 100 * 10 / 10
print(y)
print(int(y))
结果如下(第一个值是操作的结果,第二个值是相同操作的int()):
--------- 251.0
251.0
251
--------- 2.51 * 100
251.0
250
--------- 2.51 * 1000 / 10
251.0
251
--------- 2.51 * 100 * 10 / 10
251.0
250
--------- 402.0
402.0
402
--------- 4.02 * 100
402.0
401
--------- 4.02 * 1000 / 10
402.0
401
--------- 4.02 * 100 * 10 / 10
402.0
401
2.51和4.02是导致2.50->;5.00范围内出现这种奇怪行为的唯一值。当给定相同的操作时,该范围内的每两位数字值转换为int没有任何问题。
那么,我错过了什么导致这些结果呢?顺便说一下,我正在使用Python2.7.2。
使用二进制浮点表示的语言(Python是其中之一)不能精确地表示所有的小数。如果计算结果是250.999999999999(可能是),那么取整数部分将得到250。
关于这个主题的规范文章是What Every Computer Scientist Should Know About Floating-Point Arithmetic。
函数
int()
简单地截断小数点处的数字,得到250。使用得到251作为整数。一般来说,浮点数不能精确表示。因此,应注意舍入错误。如前所述,这不是特定于Python的问题。这是所有计算机语言中反复出现的问题。
What Every Computer Scientist Should Know About Floating-Point Arithmetic
浮点数不能代表所有数字。特别是,2.51不能用浮点数表示,而是用非常接近浮点数的数字表示:
如果使用int来截断数字,则会得到:
看看Decimal类型。
相关问题 更多 >
编程相关推荐