鱼C论坛

 找回密码
 立即注册
查看: 901|回复: 6

[已解决]求助:赋值总是莫名其妙减一

[复制链接]
发表于 2021-10-31 14:36:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Chiller 于 2021-10-31 14:36 编辑

以下为原代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
        float price;
        int time=0;
        cout<<"输入话费";
        cin>>price;
        if(price<=0.5)
        {
                time=3;
        }                                                                //前面部分未出错
        else
        {
                price=price-0.5;
                cout<<price/0.2<<endl;
                time=price/0.2;
                cout<<time<<endl;
                time=time+3;
        }
        cout<<time<<endl;
}


当我输入1.3时,time本该为7,输出时却是6;price/0.2输出的结果是4,可下面time被赋值后输出3,导致结果为6
请问这是为什么?
最佳答案
2021-10-31 14:43:09
price=1.3>0.5所以:
else
{
                price=price-0.5;//price=0.7
                cout<<price/0.2<<endl;
                time=price/0.2;//time=int(3.5)=3
                cout<<time<<endl;
                time=time+3;//time=3+3=6
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-31 14:43:09 | 显示全部楼层    本楼为最佳答案   
price=1.3>0.5所以:
else
{
                price=price-0.5;//price=0.7
                cout<<price/0.2<<endl;
                time=price/0.2;//time=int(3.5)=3
                cout<<time<<endl;
                time=time+3;//time=3+3=6
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 14:49:16 | 显示全部楼层

问题是1.3-0.5等于0.8....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 15:18:06 | 显示全部楼层
Chiller 发表于 2021-10-31 14:49
问题是1.3-0.5等于0.8....

0.799999
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 15:24:22 | 显示全部楼层

这样啊,方便解释下原理吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 15:33:39 | 显示全部楼层
Chiller 发表于 2021-10-31 15:24
这样啊,方便解释下原理吗

不止是 C++ 或 C,大部分程序语言包括 Python、Java 等,对于浮点数精度肯定会有误差的,因为程序语言是以 1 和 0 为基础构筑而成的(解决方法就是自定义浮点数输出精度)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 16:48:07 | 显示全部楼层
本帖最后由 jhq999 于 2021-10-31 16:56 编辑
Chiller 发表于 2021-10-31 15:24
这样啊,方便解释下原理吗

百度一下浮点数
就和0.9无限循环等于1一样讨厌。浮点为了范围舍掉精度,精确计算尽量避免用浮点
price=(price*100-0.5*100)/100;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 19:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表