说我有一个字符串(我实际上从其他地方得到这个值)
std::string val = "2.31";
现在我正在做这样的事情
float f = atof(val);
现在f有2.31xxxxxxxxxxx
之类的东西关于如何在小数点后得到两个位置的任何建议?这样f看起来像2.3100000 ......
答案 0 :(得分:1)
你永远无法获得float中每个输入的确切值。这是由于计算机中浮点的表示。这就是为什么你不能在浮标上做==
的原因。如果你想要精确度,你将不得不使用其他格式(BCD?)
答案 1 :(得分:1)
二进制浮点不能精确地表示小数,十进制值。在大多数情况下,存储在float
中的值将是近似值。但是,如果使用的数字不超过std::numeric_limits<float>::digits10
,使用正确的打印算法将恢复原始数字。
答案 2 :(得分:0)
template <typename T>
T val(const std::string& s)
{
T x;
std::stringstream ss;
ss << s;
ss >> x;
return x;
}
int main() {
float f =val<float>("2.31");
std::cout<<f;
}