gpt4 book ai didi

c - 使用 C 时面对 'invalid operands to binary expression (' float' 和 'float' )'

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:43 31 4
gpt4 key购买 nike

在做 CS50 问题集 1 - 现金时,我在尝试编写代码时遇到了以下问题。我已将变量声明为整数。为什么它仍然发生?非常感谢您的帮助。

“二进制表达式的无效操作数(‘float’和‘float’)”

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(){
float owe_in_dollars;
float owe_in_cent;
int coin_count = 0;
do
{
owe_in_dollars = get_float("Change: ");
}while(owe_in_dollars<0);
owe_in_cent = (int)(owe_in_dollars*100);
if (owe_in_cent%(int)25 > 0){
coin_count++;
}
printf("%i", coin_count);
}

最佳答案

这段代码有几个问题,但我认为产生编译器错误的特定问题是

if (owe_in_cent%(int)25 > 0){

owe_in_cent 是一个 float 。它没有理由是 float ,因为您已将它分配给一个整数值。但是你将它声明为 float,所以它就是这样。 25 是一个 int,因此将它转换为 int 没有任何意义,但无论是否进行转换,它都会被转换为float 以便用 owe_in_cent 进行算术运算,因为所有算术运算符都要求操作数的类型相同。搜索“通常的算术转换”以获取详细信息,但归根结底,这些自动转换始终是整数 → float ,而不是 float → 整数。

然后问题就出现了,因为 % 运算符要求它的操作数是整数,而不是 float 。有一个数学函数可以计算浮点模数,但您确实需要整数运算,所以最好的办法是将 owe_in_cent 设为 int 而不是 float

实际上,您真的应该养成对浮点值使用 double 的习惯。 float 非常不精确,除了在视频芯片和嵌入式处理器中,使用如此不精确的表示是没有意义的。它不会为您节省任何东西。

最后,记住关于 float 的两个重要事实:

  1. 它不能精确表示分母不是二的幂的分数。换句话说,5.25 有精确表示,因为 .25 是四分之一,是 2 的幂,但 5.26 不能精确表示,最终会是一个略大于或略小于 5.26 的数字。当您将该数字乘以 100 时,您最终会得到略多于或略小于 526 的结果。

  2. 将 float 转换为整数只会去掉小数部分,无论它多么接近 1.0。因此,例如,(int)525.9997 是 525,而不是 526。您应该能够看到可能产生的问题。

有一个名为round 的库函数它将 float 四舍五入为最接近的整数,这可能是您想要的。

关于c - 使用 C 时面对 'invalid operands to binary expression (' float' 和 'float' )',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876843/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com