【发布时间】:2020-06-26 23:59:33
【问题描述】:
const double MIN_STD_POWER = 90.111;
const double MAX_STD_POWER = 99.999;
double m_size = 2;
void display() const
{
if (m_size == MAX_STD_POWER || m_size == MIN_STD_POWER)
{
cout << m_size << " liters - " << m_type << endl;
}
else
{
cout << std::fixed << std::setprecision(2) << m_size << " liters - " << m_type << endl;
}
}
所以基本上,我试图将m_size 打印到两位有效数字,但不是MAX_STD_POWER,因为它一直四舍五入为100.00,而不是99.999。 为什么上述方法不起作用?
我想要的输出示例:
4.10 - liters
2.10 - liters
2.10 - liters
2.10 - liters
Ship doesn't exceed power regulation of: 99.999
我得到的输出示例:
4.10 - liters
2.10 - liters
2.10 - liters
2.10 - liters
Ship doesn't exceed power regulation of: 100.00
【问题讨论】:
-
示例输出与代码不匹配,在代码中
liters后面总是有一个连字符。您还说它打印的是 100.00 而不是 99.999,但随后在示例输出中显示为 99.999。发布您获得的确切输出并解释它是如何不期望的会改善问题 -
请制作可以在本地直接复制和编译的示例。当前的不产生显示的输出。
-
您知道比较相等的两个浮点数的风险吗? wandbox.org/permlink/Eg2LcS8EkUEnv7bG
标签: c++ floating-point rounding