首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用C++时面临“对二进制表达式('float‘和’float‘)无效的操作数

在使用C++时面临“对二进制表达式('float‘和’float‘)无效的操作数
EN

Stack Overflow用户
提问于 2019-04-27 10:52:15
回答 1查看 90关注 0票数 0

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

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

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-27 11:20:53

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

代码语言:javascript
复制
if (owe_in_cent%(int)25 > 0){

owe_in_cent是一个float。没有理由让它是浮点数,因为您已经将它赋给了一个整数值。但是您声明它为float,所以它就是这样。25是一个int,所以没有必要将它转换为int,但是不管有没有强制转换,它都将被转换为float,以便使用owe_in_cent进行算术运算,因为所有算术运算符都要求操作数具有相同的类型。有关详细信息,请搜索“常用算术转换”,但底线是这些自动转换始终是整数整数浮点,决不是浮点整数→→。

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

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

最后,请记住关于浮点数的两个重要事实:

  1. ,它不能精确地表示分母不是2的幂的分数。换句话说,5.25有一个精确的表示,因为.25是1/4,这是2的幂,但5.26不能精确表示,最终将是一个略大于或略小于5.26的数字。当您将该数字乘以100时,最终将得到略大于或略小于526的值。
  2. 将浮点数转换为整数只会丢弃小数部分,无论它多么接近1.0。例如,(int)525.9997是525,而不是526。您应该能够看到可能产生的问题。

有一个名为round的库函数,它可以将浮点数舍入到最接近的整数,这可能就是您想要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55876843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档