2014-03-01 72 views
5

这两个等价吗?将浮点数转换为int,有无转换

float f = 3.14; 
int i; 
i = f; // 3 

而且

float f = 3.14; 
int i; 
i = (int) f; // 3 
+0

它们是相同的。你为什么要问? – rjv

+0

都是一样的......牛顿理论越来越复杂..:D –

+1

3 == 3,不是吗? :P –

回答

8

编译器处理这两种情况的方式没有区别。生成的机器码将是相同的。但是,第一个是隐式转换,第二个是显式转换。根据编译器标志,执行隐式转换时可能会失去精度。

在附注上,文字3.14的类型为double,这意味着在语句float f = 3.14中也可能存在精度损失。一个干净的方法是编写float f = 3.14f,它指定这是 类型为float的值3.14。

4

是那些是等价的,没有任何区别。

+0

你是上帝。谢谢。 –

+0

@GeorgeNewton现在_god_祝福你了,它接受答案的时间:D +1 – P0W

5

它们是相同的。

在32位x86系统上使用GCC 4.8.2进行测试。

gcc -Wall -Wextra -Wpedantic在编译这段代码时不会给出任何警告,但是它会用-Wconversion

+0

它将与'-Wconversion' – MBlanc

+0

@MBlanc是的,你是对的。答案已更新。 –

0

编译器足够智能,可以同时处理这两种情况。但我更喜欢第二种方法,因为在大型程序中阅读起来更容易。另外建议在显式转换中指定您正在投射的类型。最后,您的第一种方法可能无法在C#中工作。
Ref:http://msdn.microsoft.com/en-us/library/ms173105.aspx