Python浮点到int转换

2024-04-19 02:12:17 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我将一个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。


Tags: 代码gt数字floatintprint
3条回答

使用二进制浮点表示的语言(Python是其中之一)不能精确地表示所有的小数。如果计算结果是250.999999999999(可能是),那么取整数部分将得到250。

关于这个主题的规范文章是What Every Computer Scientist Should Know About Floating-Point Arithmetic

2.51 * 100 = 250.999999999997

函数int()简单地截断小数点处的数字,得到250。使用

int(round(2.51*100)) 

得到251作为整数。一般来说,浮点数不能精确表示。因此,应注意舍入错误。如前所述,这不是特定于Python的问题。这是所有计算机语言中反复出现的问题。

What Every Computer Scientist Should Know About Floating-Point Arithmetic

浮点数不能代表所有数字。特别是,2.51不能用浮点数表示,而是用非常接近浮点数的数字表示:

>>> print "%.16f" % 2.51
2.5099999999999998
>>> 2.51*100
250.99999999999997
>>> 4.02*100
401.99999999999994

如果使用int来截断数字,则会得到:

250
401

看看Decimal类型。

相关问题 更多 >