int为5和float为5.0之间有区别吗



除了浮点值有小数外,我对5的int和5.0的float之间是否有任何区别感到困惑。

使用int可以做哪些事情,而使用float不能做哪些事情?拥有两个独立的类型有什么意义,而不是一开始就让一切都是float

它们是不同的数据类型:

type(5)     # int
type(5.0)   # float

因此,严格来说,它们并不相同。

然而,他们是平等的:

5 == 5.0     # true

它们是不同的类型。

>>> type(5)
<type 'int'>
>>> type(5.0)
<type 'float'>

在内部,它们的存储方式不同。

55.0在python中是不同的对象,因此5 is 5.0False

但在大多数情况下,它们的行为与5 == 5.0True相同

由于您的问题集中在具有两种不同数据类型的差异和需求上,我将尝试集中于此并回答。

需要不同的数据类型(为什么不把所有东西都放在浮点?)

不同的数据类型具有不同的内存使用率。int使用2字节,而float使用4字节。可以在正确的位置使用正确的数据类型并节省内存

我可以用int做哪些事情,而不能用float做哪些事情?

在使用这两种数据类型时,最重要的一点应该知道,"整数除法截断":任何小数部分都将被丢弃。为了得到想要的结果,你应该使用正确的类型。

Brian Kernighan和Dennis Ritchie的《C编程语言》一书中给出了一个很好的例子,无论使用何种语言,该书都适用。

此语句将温度从华氏度转换为摄氏度。

float celsius=(5/9)*(Fahrenheit-32)

这个代码总是给你答案为0。这是因为5/9的答案是0.5556,由于截断,它被取为0。

现在看看这个代码:

float celsius=(5.0/9.0)*(Fahrenheit-32)

此代码将为您提供正确答案,因为5.0/9.0给我们的值为0.5556。由于我们在这里使用了浮点值,编译器不会截断该值。浮点值防止了分数部分的截断,并给出了我们想要的答案

我想这会告诉你5和5.0 之间的区别有多重要

这个问题已经得到了回答:它们有不同的类型
但这是什么意思?

人们必须从对象的角度来思考:它们在某种程度上是不同类的对象,而类决定了对象的行为。

因此,他们的行为会有所不同。

当你使用像Smalltalk这样的纯面向对象的语言时,更容易掌握这些东西,因为你显然可以浏览Float和Integer类,并了解它们在实现中的差异。在Python中,它更复杂,因为计算模型是多层的,包含类型、运算符和函数的概念,而这种复杂性在某种程度上掩盖了面向对象的基本原则。但从行为的角度来看,它最终是一样的:Python:术语';类';VS';type';

那么,行为的这些差异是什么呢
它们之所以薄,是因为我们尽最大努力使算术(包括混合算术)行为与数学定律相匹配,无论编程语言是什么。

浮点的行为不同,因为它们保留的有效位数量有限。这是保持计算简单快速的必要权衡。小整数需要很少的有效位,所以它们的行为与浮点基本相同。但当它们长大后,就不会了。下面是一个算术示例:

print(5.0**3 == 5**3)
print(5.0**23 == 5**23)

前一个表达式将打印True,后一个表达式打印False。。。因为5^23需要表示54位,而Python VM在大多数情况下将依赖于仅提供53位有效位的IEEE754双浮点。

最新更新