结果正在四舍五入[C]

时间:2015-12-04 18:37:02

标签: c floating-point

我一直用C编写这个程序,我注意到fee变量中捕获的除法结果总是固定值, 5.00 < / strong>,但结果应 5.78 。 你能解释为什么它有这种行为,我该怎么做才能解决它 ?

#include <stdio.h>
#include <stdlib.h>

int main(void){

    printf("Input package dimensions: width, heigth, length \n");
    int width, height, length;
    scanf("%d", &width ); 
    scanf("%d", &height ); 
    scanf("%d", &length );

    int weight = width*height*length;
    printf("%d\n", weight);
    float fee = weight/166;

    printf("%.2f\n", fee);
    printf("The fee is : $%.2f\n and", fee); 

    system("pause");
    return 0;
}

7 个答案:

答案 0 :(得分:4)

那是因为你把int除以int。要获得浮点数,其中至少有一个应该是浮点数。

float fee = weight/166.0;

答案 1 :(得分:4)

weight166都有int类型,因此weight/166是整数除法,它会截断任何小数部分。将结果赋给float类型的变量的事实是无关紧要的。

您希望执行浮点除法,您可以通过确保至少有一个操作数具有浮点类型来完成浮点除法。最简单的方法之一是

float fee = weight / 166.0;

答案 2 :(得分:3)

尝试:

float fee = (float)weight/166.0;

否则执行整数除法,然后转换为浮动。

答案 3 :(得分:3)

float fee = weight/166;

166intwightintint除以另一个int将始终生成int,并且仅当结果存储在fee时,才会将其投放到float

您可以通过

修复它
float fee = (float)weight/166;

float fee = weight/166.0;

答案 4 :(得分:2)

在此行weight166将被划分为整数,然后转换为float

float fee = weight/166;  // integer division

您需要将其中一个转换或定义为float,以便进行更准确的划分。例如

float fee = weight/166.0; // double precision division

float fee = (float) weight/166; // single precision division (float)

或者如果你想让你的同事感到惊讶:

float fee = weight/166.0f; // single precision division (float)

答案 5 :(得分:2)

那是因为将整数除以整数会得到一个整数,这就是weight/166的作用。它后来被浮点覆盖,但那“太晚了”。

在您的情况下进行浮点除法的最明确方法是:

(float)weight / 166.0f

答案 6 :(得分:1)

这应该解决它。

float fee = weight/166.0;