【发布时间】:2014-05-27 20:23:45
【问题描述】:
当您需要整数值并且整数文字无论如何都会隐式转换为双精度/浮点时,为什么要使用双精度或浮点文字?当需要小数值时,为什么还要添加f(以制作浮点文字),无论如何都会将双精度转换为浮点数?
比如我经常看到类似下面的代码
float foo = 3.0f;
double bar = 5.0;
// And, unfortunately, even
double baz = 7.0f;
和
void quux(float foo) {
...
}
...
quux(7.0f);
但据我所知,这些等价于
float foo = 3;
// or
// float foo = 3.0;
double bar = 5;
double baz = 7;
quux(9);
如果您使用重载语言(c++,java),我可以理解方法调用,如果函数重载(或将来),它实际上可以产生功能上的差异,但我更担心使用没有重载的 C(以及在较小程度上是 Objective-C)。
那么有什么理由打扰额外的小数和/或f?特别是在初始化的情况下,声明的类型就在那里?
【问题讨论】:
-
我很感激我的开发人员同事明确说明他们的类型,因为这告诉我他们在编写代码时考虑了类型。否则,看起来他们可能很懒惰并且没有思考:一时兴起将
ints、floats和doubles混合在一起。简而言之,它让我作为一名代码审查员,相信他们会尽职尽责。 -
当变量的含义是浮点数时,我会这样做。即使我目前将它与整数值一起使用,变量的声明也会提醒我变量应该代表什么。你说得对,不需要额外的.0,对我来说只是一个额外的提醒。
-
@abelenky 当您进行代码审查并看到
f时,请务必仔细检查他们是否真的需要浮点数,而不是双精度数。部分原因是找到存储在双变量中的浮点文字。碰巧与这个特定值无关,但仅仅因为他们添加了f并不一定意味着他们关注类型。 -
@Jongware 该问题的公认答案对于任何非古代编译器都是错误的。
标签: c implicit-conversion floating-point-conversion