Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;舍入行为_C++_Linux_G++_Rounding - Fatal编程技术网

C++ C++;舍入行为

C++ C++;舍入行为,c++,linux,g++,rounding,C++,Linux,G++,Rounding,将0.115四舍五入为0.12是有道理的。然而,当我们将f更改为0.225时,输出为: 0.115 0.12 为什么不四舍五入到0.23?您的计算机不能准确地表示大多数十进制分数,因为它可以处理二进制数。相反,它试图找到它能代表的最接近的数字,并使用它来代替 例如,“我的电脑”将以下数字表示为: 0.225 0.22 默认情况下,C++将使用正常舍入最近的数字,即,数字 5-9< /代码>被舍入, 04-4/COD>被舍入。因此,在上述数字中,0.115、0.245和0.335将被四舍五入为

将0.115四舍五入为0.12是有道理的。然而,当我们将f更改为0.225时,输出为:

0.115
0.12

为什么不四舍五入到0.23?

您的计算机不能准确地表示大多数十进制分数,因为它可以处理二进制数。相反,它试图找到它能代表的最接近的数字,并使用它来代替

例如,“我的电脑”将以下数字表示为:

0.225
0.22

默认情况下,C++将使用正常舍入最近的数字,即,数字<代码> 5-9< /代码>被舍入,<代码> 04-4/COD>被舍入。因此,在上述数字中,

0.115
0.245
0.335
将被四舍五入为
0.12
0.24
0.34
,而
0.225
0.445
将被四舍五入为
0.22
0.44

试着看看当您使用
std::setprecision(20)
时会发生什么。请参阅。@n.m.此处不相关<例如,code>0.245将四舍五入到
0.25
0.225
0.22
decimal      actual representation
0.115        0.115000002
0.225        0.224999994
0.245        0.245000005
0.335        0.335000008
0.445        0.444999993