打印 double 的整个非小数部分
Print whole non-decimal part of a double
假设我有一个 double d = 123456789
(我知道双精度数总是代表一个整数)。我正在尝试使用 C++ 打印它,以便准确打印 123456789
。不幸的是,这不是默认行为:
double d = 123456789;
cout << d << "\n";
output: 1.23457e+08
我发现了以下 trick/cheat:
double d = 123456789;
cout << (long) d << "\n";
output: 123456789
这是这样做的方法,还是有使用一些输出操纵器的更简洁的方法?
这里可以用
#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
}
最大精度可以用
设置
std::setprecision(std::numeric_limits<long double>::digits10 + 1)
编辑:我将在此处保留有关转换的信息,但正确的方法是按照其他答案中的建议使用 setprecision。
转换为 long
没问题,只要您的值适合 long
。如果您处理的值大于 long
可以表示的值,您可以升级到 long long
或 unsigned long long
。 (使用签名版本支持负值)。
请记住,double
/float
可以表示非常大的值,因此最终您可能会遇到甚至不适合 unsigned long long
的值。
你可以用
之类的东西检查溢出
if (d <= (double)std::numeric_limits<long long>::max()
&& d >= (double)std::numeric_limits<long long>::min())
{
cout << (unsigned long long) d;
}
else
{
cout << "value d is very large: " << d;
}
您可以使用操纵器并设置输出格式,如下所示
double d = 123456789;
std::cout << std::setprecision(9) << std::noshowpoint;
std::cout << d << std::endl;
假设我有一个 double d = 123456789
(我知道双精度数总是代表一个整数)。我正在尝试使用 C++ 打印它,以便准确打印 123456789
。不幸的是,这不是默认行为:
double d = 123456789;
cout << d << "\n";
output: 1.23457e+08
我发现了以下 trick/cheat:
double d = 123456789;
cout << (long) d << "\n";
output: 123456789
这是这样做的方法,还是有使用一些输出操纵器的更简洁的方法?
#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
}
最大精度可以用
设置std::setprecision(std::numeric_limits<long double>::digits10 + 1)
编辑:我将在此处保留有关转换的信息,但正确的方法是按照其他答案中的建议使用 setprecision。
转换为 long
没问题,只要您的值适合 long
。如果您处理的值大于 long
可以表示的值,您可以升级到 long long
或 unsigned long long
。 (使用签名版本支持负值)。
请记住,double
/float
可以表示非常大的值,因此最终您可能会遇到甚至不适合 unsigned long long
的值。
你可以用
之类的东西检查溢出if (d <= (double)std::numeric_limits<long long>::max()
&& d >= (double)std::numeric_limits<long long>::min())
{
cout << (unsigned long long) d;
}
else
{
cout << "value d is very large: " << d;
}
您可以使用操纵器并设置输出格式,如下所示
double d = 123456789;
std::cout << std::setprecision(9) << std::noshowpoint;
std::cout << d << std::endl;