求助:赋值总是莫名其妙减一
本帖最后由 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:}
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
}
jhq999 发表于 2021-10-31 14:43
问题是1.3-0.5等于0.8.... Chiller 发表于 2021-10-31 14:49
问题是1.3-0.5等于0.8....
0.799999 jhq999 发表于 2021-10-31 15:18
0.799999
这样啊,方便解释下原理吗{:10_275:} Chiller 发表于 2021-10-31 15:24
这样啊,方便解释下原理吗
不止是 C++ 或 C,大部分程序语言包括 Python、Java 等,对于浮点数精度肯定会有误差的,因为程序语言是以 1 和 0 为基础构筑而成的(解决方法就是自定义浮点数输出精度) 本帖最后由 jhq999 于 2021-10-31 16:56 编辑
Chiller 发表于 2021-10-31 15:24
这样啊,方便解释下原理吗
百度一下浮点数
就和0.9无限循环等于1一样讨厌。浮点为了范围舍掉精度,精确计算尽量避免用浮点
price=(price*100-0.5*100)/100;
页:
[1]