C++ 浮点数只打印整数部分

C++ 浮点数只打印整数部分,c++,floating-point,C++,Floating Point,我有一个这样的程序: #include <iostream> using namespace std; int main () { double x; for (int i = 1; i < 100; i++) { cout << (x = i/100) << endl; } return 0; } 我已经在Cygwin-g++和MinGW-g++上对此进行了测试;两个版本都是4.7.2。 哪里

我有一个这样的程序:

#include <iostream>
using namespace std;

int main ()
{
    double x;
    for (int i = 1; i < 100; i++)
    {
        cout << (x = i/100) << endl;
    }
    return 0;
}
我已经在Cygwin-g++和MinGW-g++上对此进行了测试;两个版本都是4.7.2。
哪里可能有问题?

您需要将
i
100
转换为双精度,例如:

cout << (x = (double)i/100) << endl;
cout << (x = static_cast<double>(i)/100) << endl;

cout您需要将
i
100
转换为双精度,例如:

cout << (x = (double)i/100) << endl;
cout << (x = static_cast<double>(i)/100) << endl;

cout这是因为
i
100
都是整数,编译器进行整数除法

解决此问题的最简单方法是使用
double
literal
100.0

cout << (x = i/100.0) << endl;

cout这是因为
i
100
都是整数,编译器进行整数除法

解决此问题的最简单方法是使用
double
literal
100.0

cout << (x = i/100.0) << endl;

cout将
100
更改为
100.0
将产生一个
double
值:

cout << (x = i/100.0) << endl;
//                ^^

cout将
100
更改为
100.0
将产生一个
double
值:

cout << (x = i/100.0) << endl;
//                ^^

cout这只是因为
=
是一个序列运算符,转换只在单个序列中完成

所以你只需要做整数到整数的运算,不需要转换

因此整数结果将转换为浮点结果,但此时浮点已被丢弃。因此,您必须确保在
=
的右侧部分使用了一个floatingpoint变量,该变量完成了floatingpoint和整数值之间的运算,并且完成了转换


您可以通过键入
100.0
1.0

来实现这一点,这只是因为
=
是一个序列运算符,转换仅在单个序列中完成

所以你只需要做整数到整数的运算,不需要转换

因此整数结果将转换为浮点结果,但此时浮点已被丢弃。因此,您必须确保在
=
的右侧部分使用了一个floatingpoint变量,该变量完成了floatingpoint和整数值之间的运算,并且完成了转换


您可以通过键入
100.0
1.0

来实现这一点,您的程序是正确的,输出也是正确的。您只需将其转换为双精度。您的程序是正确的,输出也是正确的。你只需要投双倍,让我考虑一下。。这会给你一个
双倍
还是
浮动
?@BoBTFish让我考虑一下。。这会让你得到一个
double
float
?@BoBTFish我会尽可能避免使用强制类型转换,因为100可以很容易地更改为100.0,这是更“性能”的解决方案。@TehSuu,在这种情况下-是的,但下次OP可能会有
I/j
,并面临同样的问题。我会尽可能避免使用强制类型转换,由于100可以很容易地被改为100,它的性能更高。@ TehSuu,在这种情况下,是的,但是下次OP可能有“代码> I/J ,并且面临同样的问题。<代码> 1F < /C>是无效的C++。”Pascal Cuoq肯定吗?我经常在我的OpenGL应用程序中使用它,该应用程序是在我的FLTK项目(即c++)中实现的。MSVC编译器直到今天才抛出任何警告。(我们都知道,即使MSV纯C编译器更多的是C++作为C),所以IM有点困惑,如果是这样的话,一个特定的编译器可以自由接受语法<代码> 1F <代码>,它可以添加到C++语言中,而不含糊不清(实际上,在一些类似C语言的java语言中被接受)。但是,在回答C++问题时,最好不要使用它,而不需要了解OP的编译器。Pascal Cuoq好的,我会改变它,只是不知道。<代码> 1F < /C> >是无效的C++。Pascal Cuoq肯定吗?我经常在我的OpenGL应用程序中使用它,该应用程序是在我的FLTK项目(即c++)中实现的。MSVC编译器直到今天才抛出任何警告。(我们都知道,即使MSV纯C编译器更多的是C++作为C),所以IM有点困惑,如果是这样的话,一个特定的编译器可以自由接受语法<代码> 1F <代码>,它可以添加到C++语言中,而不含糊不清(实际上,在一些类似C语言的java语言中被接受)。但是,在回答C++问题时,最好不要使用它,而不需要了解OP的编译器。帕斯卡·库克好的,我会改的,只是我不知道。