说我有一个这样的字符串(我实际上是从其他地方得到这个值)
std::string val = "2.31";
现在我正在做这样的事情
float f = atof(val);
现在 f 有类似 2.31xxxxxxxxxxxx 的东西
关于如何在小数点后得到两位的任何建议?这样 f 看起来像 2.3100000 ...
说我有一个这样的字符串(我实际上是从其他地方得到这个值)
std::string val = "2.31";
现在我正在做这样的事情
float f = atof(val);
现在 f 有类似 2.31xxxxxxxxxxxx 的东西
关于如何在小数点后得到两位的任何建议?这样 f 看起来像 2.3100000 ...
您永远无法获得浮点中每个输入的准确值。那是由于计算机中浮点的表示。这也是为什么你不能==
在花车上做的。如果你想要精确,你将不得不使用其他格式(BCD?)
二进制浮点不能精确地表示小数、十进制值。float
在大多数情况下,存储在 a 中的值将是一个近似值。但是,如果使用的数字不超过std::numeric_limits<float>::digits10
数字,则使用正确的打印算法将恢复原始数字。
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;
}