C中最简单的操作无法正常工作

时间:2011-06-07 14:34:55

标签: c floating-point

  

可能重复:
  Possible Loss of Fraction
  What is the behavior of integer division in C?

我是C的新手,我遇到了一些麻烦。以下代码:

int nr = 3;
float fl = nr/10;
printf("%4.1f\n", fl);

按照我的预期打印0.0但不打0.3。有什么问题?

5 个答案:

答案 0 :(得分:2)

int除以数字将是一个向下舍入的int。您需要先将nr转换为浮动...

float fl = (float) nr /10;

或者让编译器通过使分母成为浮动来知道你想要浮动

float fl = nr /10.0f;

答案 1 :(得分:2)

此:

float fl = nr/10;

进行整数运算。你想要:

float fl = nr/10.0;

此外,除非您有某些特定原因,否则最好使用双打进行浮点活动,而不是漂浮物。

答案 2 :(得分:2)

nr是一个int,所以你仍然在进行整数除法,但是将它分配给一个浮点数。将nr转换为浮点数:

float fl = (float) nr / 10;
// or divide by a float
float fl = nr / 10.0f;

答案 3 :(得分:1)

尝试

float fl = (float)nr / 10;

否则编译器将执行整数运算。 c faq on the subject很棒。

答案 4 :(得分:1)

int nr = 3;
float fl = nr/10; // float = int/int => integer division and then conversion to float
printf("%4.1f\n", fl);