假设我有一个double d = 123456789
(我知道双精度始终代表整数)。我正在尝试使用C ++打印它,以便准确打印123456789
。不幸的是,这不是默认行为:
double d = 123456789;
cout << d << "\n";
output: 1.23457e+08
我发现了以下技巧/作弊:
double d = 123456789;
cout << (long) d << "\n";
output: 123456789
这是这样做的方法,还是使用某些输出操纵器的更干净的方法?
std::setprecision可以在这里使用。
#include <iomanip> // std::setprecision
#include <iostream> // std::cout
int main() {
double d = 123456789;
std::cout << std::setprecision(5) << d << "\n";
// 1.2346e+08
std::cout << std::setprecision(15) << d << "\n";
// 123456789
}
强制为long很好,只要您的值可以适合long。如果要处理的值大于long可以表示的值,则可以很长一段时间升级到unsigned。
请记住,double / float可以表示非常大的值,所以最终您可能会遇到即使在无符号long long中也不适合的值。
您可以使用类似的方法检查是否溢出
if (d <= (double)std::numeric_limits<unsigned long long>::max())
{
cout << (unsigned long long) d;
}
else
{
cout << "value d is very large: " << d;
}