C++ 打印双精度打印的整个非小数部分

C++ 打印双精度打印的整个非小数部分,c++,printing,output,double,cout,C++,Printing,Output,Double,Cout,假设我有一个双精度d=123456789(我知道双精度总是表示一个整数)。我正试图用C++打印它,以便打印出完全正确的 123456789代码>代码。不幸的是,这不是默认行为: double d = 123456789; cout << d << "\n"; output: 1.23457e+08 double d=123456789; cout可以在这里使用 \include//std::setprecision #include//std::cout int ma

假设我有一个
双精度d=123456789
(我知道双精度总是表示一个整数)。我正试图用C++打印它,以便打印出完全正确的<代码> 123456789代码>代码。不幸的是,这不是默认行为:

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

output: 1.23457e+08
double d=123456789;
cout可以在这里使用

\include//std::setprecision
#include//std::cout
int main(){
双d=123456789;
std::cout可在此处使用

\include//std::setprecision
#include//std::cout
int main(){
双d=123456789;

std::coutEdit:我将把这个放在这里,以获取有关铸造的信息,但正确的方法是按照其他答案中的建议使用

只要您的值可以放入
long
中,就可以转换为
long
。如果您处理的值大于
long
所能表示的值,则可以升级为
long
无符号long
(使用有符号版本支持负值)

请记住,
double
/
float
可以表示非常大的值,因此最终可能会遇到不适合
无符号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;
}
if(d=(double)std::numeric_limits::min())
{

coutEdit:我将把这个放在这里,以获取有关铸造的信息,但正确的方法是按照其他答案中的建议使用

只要您的值可以放入
long
中,就可以转换为
long
。如果您处理的值大于
long
所能表示的值,则可以升级为
long
无符号long
(使用有符号版本支持负值)

请记住,
double
/
float
可以表示非常大的值,因此最终可能会遇到不适合
无符号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;
}
if(d=(double)std::numeric_limits::min())
{

cout您可以使用操纵器并设置输出格式,如下所示

double d = 123456789;
std::cout << std::setprecision(9) << std::noshowpoint;
std::cout << d << std::endl;
double d=123456789;

std::cout您可以使用操纵器并设置输出格式,如下所示

double d = 123456789;
std::cout << std::setprecision(9) << std::noshowpoint;
std::cout << d << std::endl;
double d=123456789;

太长了,读不下去了?太长了,读不下去了?code>
double
的范围通常高达
1e308