打印整个整数的非小数部分

问题描述 投票:0回答:2

假设我有一个double d = 123456789(我知道双精度始终代表整数)。我正在尝试使用C ++打印它,以便准确打印123456789。不幸的是,这不是默认行为:

double d = 123456789;
cout << d << "\n";

output: 1.23457e+08

我发现了以下技巧/作弊:

double d = 123456789;
cout << (long) d << "\n";

output: 123456789

这是这样做的方法,还是使用某些输出操纵器的更干净的方法?

c++ printing output double cout
2个回答
1
投票

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
}

0
投票

强制为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;
}
© www.soinside.com 2019 - 2024. All rights reserved.