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
literal100.0
:
cout << (x = i/100.0) << endl;
cout这是因为i
和100
都是整数,编译器进行整数除法
解决此问题的最简单方法是使用double
literal100.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的编译器。帕斯卡·库克好的,我会改的,只是我不知道。