ANSI C中的浮点转换

时间:2010-11-16 20:30:30

标签: c floating-point type-conversion ansi

鉴于以下ANSI C代码,我想知道结果:

main() {
  int a = 19.4 / 9.7;               // result = 2
  float b = (int) 19.4 / (int) 9.7  // result = 2.000000, why?
  float c = (int) 9.7;              // result = 9
}

我知道C会在转换为int时切断所有小数位,但如果我看到第二行,我的逻辑就会有缺陷。如果小数位被切断,则结果必须为2.11111。

如何在ANSI C中完成浮点转换?

5 个答案:

答案 0 :(得分:4)

在标准C中,除非另有说明(例如19.4F,9.7F),否则假定文字如19.4和9.7是双倍的。

编译器将使用整数除法函数来计算x / y(如果x和y都是int(兼容)类型)或浮点除法函数到计算机x / y,如果x和y中的至少一个是浮点类型。

float b =(int)19.4 /(int)9.7 // result = 2.000000,为什么?

你要求将19.4转换为int,并将9.7转换为int,有效地要求编译器计算19/9 = 2的整数除法,然后将其提升为float以便存储在b中。 2变为2.0。

.PMCD。

答案 1 :(得分:4)

在第2行中,您将输入值转换为整数,然后进行整数除法(因为除法的两个操作数都是整数,除法是在整数空间中完成的 - 这意味着任何小数生成都将被截断)。

所以,19/9 = 2

然后,要将此整数转换为float,它会隐式地将2转换回2.000000

答案 2 :(得分:1)

不,它必须是2.当你用int分割int时,你得到一个int。因此2.您可以将hokey-pokey转换为您喜欢的任何内容,但小数已经消失。

答案 3 :(得分:1)

除以两个整数,你将得到一个整数。除了一个浮点数和一个整数,你将得到一个浮点数。

答案 4 :(得分:1)

(int) 19.4 / (int) 9.7相当于19 / 9,它首先被解析为2(一个int)。只有在计算出2之后,它才会变成浮点变量类型。