【发布时间】:2015-07-29 20:57:30
【问题描述】:
我需要帮助来保持double 的精度。如果我将文字分配给双精度,则实际值会被截断。
int main() {
double x = 7.40200133400;
std::cout << x << "\n";
}
对于上面的代码sn-p,输出为7.402
有没有办法防止这种类型的截断?或者有没有办法准确计算double 的浮点数?例如,number_of_decimal(x) 会给出 11,因为输入在运行时是未知的,所以我不能使用 setprecision()。
我想我应该把我的问题改成: 如何在不截断浮点数的情况下将双精度数转换为字符串。即
#include <iostream>
#include <string>
#include <sstream>
template<typename T>
std::string type_to_string( T data ) {
std::ostringstream o;
o << data;
return o.str();
}
int main() {
double x = 7.40200;
std::cout << type_to_string( x ) << "\n";
}
预期的输出应该是 7.40200,但实际结果是 7.402。那么我该如何解决这个问题呢?有什么想法吗?
【问题讨论】:
-
浮点精度见this。
-
“预期的输出”——问题出在你的预期上。 “7.40200 但实际结果是 7.402”——它们是相等的,所以没有任何东西被“截断”。 cout 不可能知道您在源文件中输入了多少个零。
标签: c++ double tostring precision