Chiller 发表于 2021-10-31 14:36:38

求助:赋值总是莫名其妙减一

本帖最后由 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
请问这是为什么?{:10_333:}

jhq999 发表于 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
}

Chiller 发表于 2021-10-31 14:49:16

jhq999 发表于 2021-10-31 14:43


问题是1.3-0.5等于0.8....

jhq999 发表于 2021-10-31 15:18:06

Chiller 发表于 2021-10-31 14:49
问题是1.3-0.5等于0.8....

0.799999

Chiller 发表于 2021-10-31 15:24:22

jhq999 发表于 2021-10-31 15:18
0.799999

这样啊,方便解释下原理吗{:10_275:}

傻眼貓咪 发表于 2021-10-31 15:33:39

Chiller 发表于 2021-10-31 15:24
这样啊,方便解释下原理吗

不止是 C++ 或 C,大部分程序语言包括 Python、Java 等,对于浮点数精度肯定会有误差的,因为程序语言是以 1 和 0 为基础构筑而成的(解决方法就是自定义浮点数输出精度)

jhq999 发表于 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;
页: [1]
查看完整版本: 求助:赋值总是莫名其妙减一