目前我有这样的东西
float a = SomeQString.toFloat(); //QString has 2.37
现在 float 是 2.3690000031..
我想要的是 2.3700000000.. 关于我如何做到这一点的任何建议?另外,为什么我得到的是 2.369 而不是 2.37?
最佳答案
(已经被询问和解释了很多次。)不可能在 float
中得到 2.37
。不可能在 double
中获得 2.37
。不可能以任何 IEEE-754 风格的二进制浮点格式获得 2.37
。 2.37
不能用这种二进制浮点格式精确表示。
阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic
“获取”2.37
的一种可行方法实际上是将 2.369...
存储在 float
中(这就是您所做的已经),然后在您需要生成十进制表示时将其四舍五入为 2.37
,即在您必须向用户呈现/输出值时。
关于c++ - 字符串到 float 的转换和格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18545092/