为什么 0.125,格式为 2 位小数精度,显示“0.12”而不是“0.13”?
Why does 0.125, formatted with 2 digits of decimal precision, show "0.12" not "0.13"?
考虑:
#include <iostream>
#include <iomanip>
int main()
{
std::cout << std::fixed << std::setprecision(2);
std::cout << 0.125 << '\n'; // Prints "0.12"
std::cout << 0.126 << '\n'; // Prints "0.13" as expected
}
我知道浮点数学运算并不十分精确,但 0.125
不是实际表示的值之一吗?为什么在格式化时向下舍入到 "0.12"
而不是向上舍入到 "0.13"
?
是的,0.125
是应该具有精确二进制表示的罕见浮点值之一。
您的舍入模式可能设置为 round-half-to-even。
考虑:
#include <iostream>
#include <iomanip>
int main()
{
std::cout << std::fixed << std::setprecision(2);
std::cout << 0.125 << '\n'; // Prints "0.12"
std::cout << 0.126 << '\n'; // Prints "0.13" as expected
}
我知道浮点数学运算并不十分精确,但 0.125
不是实际表示的值之一吗?为什么在格式化时向下舍入到 "0.12"
而不是向上舍入到 "0.13"
?
是的,0.125
是应该具有精确二进制表示的罕见浮点值之一。
您的舍入模式可能设置为 round-half-to-even。