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
。