C++的0.3问题
在计算机中,我们都知道0.1+0.2
是不等于0.3
的
那等于多少呢?我们使用程序测试一下
#include<iomanip>
int main(){
std::cout<<std::setprecision(18)<<0.1+0.2;
return 0;
}
//out: 0.30000000000000004
还有一个专门以此当域名的网站Floating Point Math
在十进制系统中,10
的质因数为2
和5
若一个分数使用基数10的质因数来表示,则可以精确表示
1/2
1/4
1/5
1/8
1/10
在二进制系统中,2
的质因数为2
若一个分数使用基数2的质因数来表示,则可以精确表示
1/2
1/4
1/8
而1/5
和1/10
则是无限循环的小数
所以若需要表示0.1
这样的小数时,计算机会使用近似值
这个近似值是通过将无限循环的二进制小数转换为有限位数的浮点数来实现
在计算机中,二进制浮点数采用IEEE 754的标准格式来表示
十进制数0.1的二进制形式
十进制数0.2的二进制形式
十进制数0.875的二进制形式
使用乘2取整法,都是无限的数
解决方法
小数先转整数
1.相加后再转回小数
(0.1*10+0.2*10)/10
2.使用tofixed()方法