c - C如何计算混合的int和float数据类型

标签 c

[已解决]

我正在学习C,在学习过程中遇到了一些问题。

当我尝试在一个等式中计算 int 数据类型和 float 数据类型时,我最终得到了 2 个不同的输出。我很困惑,因为从逻辑上讲结果应该是一样的。

这是我的代码版本 1 和版本 2。不同之处在于变量 z。

  • 第一种情况:z的值为1
  • 第二种情况:z的值为0

所有输入都是11

更新 1

感谢大家的评论和回答。但我仍然对变量 p 在情况 1 中扮演什么角色以及它如何导致变量 z 为 1 而不是 0 感到困惑?

案例一

int main()
{
    float a, fee, p;
    int x, y,z;
    scanf("%f", &a);
    fee = 0.6 * a;
    x = (int)(fee);
    y = (int)(2 * fee - 2 * x);
    p = fee * 10.0;
    z = (int)(p - 10 * x - 5 * y);
    printf("%f %d %d %d", fee, x, y, z);
    return 0;
}

案例二

int main()
{
    float a, fee, p;
    int x, y,z;
    scanf("%f", &a);
    fee = 0.6 * a;
    x = (int)(fee);
    y = (int)(2 * fee - 2 * x);
    z = (int)(fee * 10.0 - 10 * x - 5 * y);
    printf("%f %d %d %d", fee, x, y, z);
    return 0;
}

最佳答案

1) z = (int)(p - 10 * x - 5 * y);
             F    I   I   I   I            // Float or Int

2) z = (int)(fee * 10.0 - 10 * x - 5 * y); // semicolon removed
              F     D      I   I   I   I   // Float, Double or Int

1) 中的所有计算均以 float 精度完成,2) 中的所有计算均以 double 精度完成。

建议:在使用浮点值时始终优先使用 double

关于c - C如何计算混合的int和float数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69491552/

相关文章:

c - 链接步骤找不到符号(XC8 编译器)

c - 在小型数据库程序中存储地址

c - 第二个线程上的 PTHREAD_MUTEX_RECURSIVE block

c - C语言字符串基础

c - 将 sched_setaffinity 的最大 CPU 数量作为基础的正确值是多少?

java - 高效存储稀疏二维网格

c - 多线程、gtk3 和 cairo : drawing in a cairo surface

c - 指针相等是否意味着整数相等?

c++ - 使用简单的构造函数在 C++ 中使用 Vectors 和自定义类的问题

C - printf 输出根据后续代码而变化