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质因数25
若一个分数使用基数10的质因数来表示,则可以精确表示

1/2
1/4
1/5
1/8
1/10

在二进制系统中,2质因数2
若一个分数使用基数2的质因数来表示,则可以精确表示

1/2
1/4
1/8

1/51/10则是无限循环的小数
所以若需要表示0.1这样的小数时,计算机会使用近似值
这个近似值是通过将无限循环的二进制小数转换为有限位数的浮点数来实现

在计算机中,二进制浮点数采用IEEE 754的标准格式来表示
十进制数0.1的二进制形式
十进制数0.2的二进制形式
十进制数0.875的二进制形式
使用乘2取整法,都是无限的数

解决方法

小数先转整数
1.相加后再转回小数
(0.1*10+0.2*10)/10

2.使用tofixed()方法

posted @ 2024-11-03 17:47  sgqmax  阅读(9)  评论(0编辑  收藏  举报