以下是我的控制台输入/输出。
请输入实数:-23486.33 检查的字符:9
谢谢。 您输入的实数是-23486.3
我输入的值是-23486.33,但是cout将其打印为-23486.3。 相关代码如下:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
// Function prototype (declaration)
string readDouble();
bool isValidDouble(string);
int main()
{
string value;
double number;
value = readDouble();
while (!isValidDouble(value)) {
cout << "The number you entered is not a valid integer." << endl;
value = readDouble();
}
number = atof(value.c_str());
cout << "Thank you." << endl
<< "The real number you entered is " << number << endl;
}
调试时,我会在方法调用atof(value.c_str())l;
后立即检查数字的值。数字显示为-23486.33。那么在那个和cout的打印之间会发生什么?在我的代码的任何部分,我都没有设置cout的精度或使其固定。
如果您有任何疑问,请告诉我。
答案 0 :(得分:2)
你试过吗
std::cout << std::setprecision(2) << number;
看看: http://www.cplusplus.com/reference/iomanip/setprecision/
答案 1 :(得分:1)
您可以将精度设置为double的最大限制。
代码段在这里:
#include <iostream>
#include <limits>
#include <iomanip>
using namespace std;
double number = ... // your double value.
cout << setprecision(numeric_limits<double>::digits10) << number << endl;
答案 2 :(得分:1)
输出double时设置精度,并在比较时明确保持精度。
当您将DEC编号的字符串表示转换为double(浮点数表示)时,内存中的数据可能在数学上不等于字符串表示。这是浮点数表示的最佳近似值,反之亦然。
答案 3 :(得分:1)
-23486.3,因为默认情况下std::cout
仅打印6位数。
要打印从标准输入(转换文本→浮动数字→文本)输入的数字,您可以set_precision
使用digits10
作为精度:
double d = -23486.33;
int precision = std::numeric_limits<double>::digits10;
std::cout << std::setprecision(precision) << d << std::endl;
显示:
-23486.33
要打印完全精确的数字(通常用于转换浮动数字→文本→浮动数字),您可以set_precision
使用max_digits10
作为精度:
double d = -23486.33;
int precision = std::numeric_limits<double>::max_digits10;
std::cout << std::setprecision(precision) << d << std::endl;
显示:
-23486.330000000002
此处打印的数字不相同,因为-23486.33在IEEE编码中没有精确的表示形式(用基数2表示而不是基数10)。
有关digits10
和max_digits10
的详细信息,请参阅: