C++ 舍入行为
C++ rounding behavior
#include <iostream>
#include <iomanip>
int main()
{
float f = 0.115;
std::cout << f << std::endl;
std::cout << std::fixed << std::setprecision(2) << f << std::endl;
return 0;
}
以上代码的输出为:
0.115
0.12
0.115 四舍五入为 0.12 是有道理的。但是,当我们将 f 更改为 0.225 时,输出为:
0.225
0.22
为什么不四舍五入到 0.23?
您的计算机无法准确表示大多数小数,因为它使用二进制数。相反,它会尝试找到它 可以 表示的最接近的数字,并使用它来代替。
例如,我的电脑将以下数字表示为:
decimal actual representation
0.115 0.115000002
0.225 0.224999994
0.245 0.245000005
0.335 0.335000008
0.445 0.444999993
默认情况下,C++ 将使用正常舍入到最接近的值,即数字 5-9
向上舍入,0-4
向下舍入。因此,上述数字中,0.115
、0.245
和0.335
将四舍五入为0.12
、0.24
和0.34
,而0.225
和 0.445
将向下舍入为 0.22
和 0.44
.
#include <iostream>
#include <iomanip>
int main()
{
float f = 0.115;
std::cout << f << std::endl;
std::cout << std::fixed << std::setprecision(2) << f << std::endl;
return 0;
}
以上代码的输出为:
0.115
0.12
0.115 四舍五入为 0.12 是有道理的。但是,当我们将 f 更改为 0.225 时,输出为:
0.225
0.22
为什么不四舍五入到 0.23?
您的计算机无法准确表示大多数小数,因为它使用二进制数。相反,它会尝试找到它 可以 表示的最接近的数字,并使用它来代替。
例如,我的电脑将以下数字表示为:
decimal actual representation
0.115 0.115000002
0.225 0.224999994
0.245 0.245000005
0.335 0.335000008
0.445 0.444999993
默认情况下,C++ 将使用正常舍入到最接近的值,即数字 5-9
向上舍入,0-4
向下舍入。因此,上述数字中,0.115
、0.245
和0.335
将四舍五入为0.12
、0.24
和0.34
,而0.225
和 0.445
将向下舍入为 0.22
和 0.44
.