目前刚学C#。
我不明白为什么有人可以使用浮点数或双精度数时会使用整数..
浮点数将添加/减去整数和十进制数,那么为什么有人会打扰使用普通的旧整数呢?
似乎 floats 或 double 会处理 Integer 可以处理的任何事情。数也..
谢谢!
主要原因与我们经常喜欢使用整数分数而不是固定精度小数的原因相同。对于有理分数,(1/3) 乘以 3 始终为 1。(1/3) 加 (2/3) 始终为 1。(1/3) 乘以 2 为 (2/3)。
为什么?因为整数分数是精确的,就像整数是精确的一样。
但是对于固定精度的实数——它就不那么漂亮了。如果 (1/3) 是.33333
,那么 3 次 (1/3) 将不是 1。如果 (2/3) 是.66666
,那么 (1/3)+(2/3) 将不是一。但是如果 (2/3) 是.66667
,那么 (1/3) 乘以 2 将不是 (2/3) 并且 1 减去 (1/3) 将不是 (2/3)。
而且,当然,您无法通过使用更多位置来解决此问题。没有小数位数可以让您准确表示 (1/3)。
浮点是一种固定精度的实数格式,很像我上面的固定精度小数。它并不总是遵循您可能期望的幼稚规则。请参阅经典论文What Every Computer Scientist Should Know About Floating-Point Arithmetic。
为了回答您的问题,首先近似地,您应该尽可能使用整数,并且仅在必须时使用浮点数。而且您应该始终记住浮点数的精度有限,比较两个浮点数以查看它们是否相等可能会产生您可能意想不到的结果。
这里给出的大多数答案都直接涉及数学概念。使用整数有纯粹的计算原因。几个跳到脑海:
正如你在这里看到的,不同的类型都有自己的大小。
例如,在使用大型数据库时,int
或float
可能会加倍所需的大小。
您有不同的数据类型,因为它们使用不同数量的位来存储数据。
通常,整数比双精度型使用更少的内存,这就是为什么不只使用最大可能的数据类型的原因。
使用整数的主要原因是内存消耗和性能。
此外,如果您需要使用表示实数的类型来完成所有这些操作,您的代码将更容易出错。
有几个原因。性能、内存,甚至不希望看到小数(无需使用格式字符串)。
有几个原因。首先,就像人们已经说过的那样,double 存储 64 位数值,而 int 只需要 32 位。
浮动是另一种情况。int 和 float 都存储 32 位数字,但 float 不太精确。浮点值最多可精确到 7 位,但除此之外它只是一个近似值。如果您有较大的数字,或者在某些情况下您有意只强制使用没有小数的整数值,则 int 是要走的路。如果您不关心精度损失并希望允许更大范围的值,则可以使用 float 代替。