我需要帮助来保持精度double
。如果我将文字分配给双精度数,则实际值会被截断。
int main() {
double x = 7.40200133400;
std::cout << x << "\n";
}
对于上面的代码片段,输出是7.402
有没有办法防止这种类型的截断?或者有没有办法准确计算一个浮点有多少个double
?例如,number_of_decimal(x)
会给出 11,因为输入在运行时未知,所以我不能使用setprecision()
.
我想我应该将我的问题改为:
如何在不截断浮点数的情况下将双精度型转换为字符串。 IE。
#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。那么我该如何解决这个问题呢?任何想法?
由于事实上float
and double
内部以二进制形式存储,即文字7.40200133400
实际上代表数字 7.40200133400000037653398976544849574565887451171875
...那么您真正想要多少精度? :-)
#include <iomanip>
int main()
{
double x = 7.40200133400;
std::cout << std::setprecision(51) << x << "\n";
}
是的,这个程序确实打印了 7.40200133400000037653398976544849574565887451171875!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)