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

[已解决]

我正在学习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

https://stackoverflow.com/questions/69491552/

相关文章:

r - 如何按日期对数据框进行排序。但日期列在宿舍

typescript - vue3 vite 别名无法按预期使用 typescript

html - 标签内的 div 换行

c# - Powershell 到 C# 语法转换

java - 为什么 UriComponentsBuilder 忽略空查询参数?

css - 在 MUI v5 中更改抽屉的颜色

python - 查找 NetworkX 中所有节点对之间的所有最短路径

c# - 了解 "await"在异步方法中的用法

python - youtube_dl - 无法阻止发布错误日志

python - 如何对齐 __str__ 输出中的列表?