C++ 字符串到浮点的转换和格式设置
现在我有这样的东西C++ 字符串到浮点的转换和格式设置,c++,qt,qtcore,C++,Qt,Qtcore,现在我有这样的东西 float a = SomeQString.toFloat(); //QString has 2.37 现在浮点数是2.3690000031 我想要的是237亿。。有没有关于我怎么做的建议?还有为什么我得到的是2.369而不是2.37 #包括 #include <string> #include <sstream> int main(void) { std::string QString = "2.37"; std::istring
float a = SomeQString.toFloat(); //QString has 2.37
现在浮点数是2.3690000031
我想要的是237亿。。有没有关于我怎么做的建议?还有为什么我得到的是2.369而不是2.37 #包括
#include <string>
#include <sstream>
int main(void)
{
std::string QString = "2.37";
std::istringstream StrToFloat(QString );
float floatVar;
StrToFloat >> floatVar;
return 0;
}
#包括
内部主(空)
{
std::string QString=“2.37”;
std::istringstream strotFloat(QString);
浮动var;
StrToFloat>>floatVar;
返回0;
}
(已经被询问和解释了很多次。)不可能在浮动中获得2.37
。在double
中无法获得2.37
。无法以任何IEEE-754样式的二进制浮点格式获取2.37
2.37
不能用这种二进制浮点格式精确表示
阅读
“获取”2.37
的一个可行方法实际上是将2.369…
存储在float
中(这是您已经做过的),然后在需要生成十进制表示时将其四舍五入到2.37
,即,当您必须向用户呈现/输出值时。如果您坚持使用Qt,这是适合您的代码:
#include <QString>
#include <QTextStream>
#include <QDebug>
using namespace std;
int main()
{
QString floatString = "2.37";
QTextStream floatTextStream(&floatString);
float f;
floatTextStream >> f;
qDebug() << f;
return 0;
}
例如,使用gcc运行以下命令(如果您有不同的场景,也可以运行类似的命令):
命令:g++main.cpp&&./a.out
输出:2.37
我同意。浮点数的四舍五入是数学上的。我不想得到2.37,我想要2.3700000。转换把我的值弄乱了。也谢谢你重新表述你的观点answer@MistyD:好的,请注意它不会是2.370000
。它将是2.370000358…
或类似的东西。而且很有可能,2.369…
比另一个2.370000358…
更接近您原来的2.37
。这就是为什么选择了2.369…
。这实际上是有道理的。2.37f
,最接近2.37的float
正好是2.36999988555908203125
。之后的下一个浮点数是2.37000012397767611328125
。如果OP不满足这些值中的任何一个,OP必须使用除float
@Pascal Cuoq之外的另一种类型:显然toFloat
转换算法会失去一些精度(这并不奇怪)。请注意,它仍然碰巧是2.36999…
,而不是OP@MitchWheat所期望的2.370000…
。@四舍五入正是结果不是2.370000的原因。它四舍五入到最接近的可表示的float
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
string floatString = "2.37";
istringstream floatStringStream(floatString);
float f;
floatStringStream >> f;
cout << f;
return 0;
}