Qt QString中的字符串到双精度转换错误



我得到了错误的从QString到double的转换值。下面是我的代码。

QString value = "0.525";
bool status = false;
double doubleVal = value.toDouble(&status);

我为doubleVal得到的值是0.52500000000000002。我本来以为是CCD_ 2。

有人能帮我吗?谢谢

如果不幸的是,你的期望太普遍了,那就没有根据了。你只能确保所有非整数实数在任何基数的位置系统中都有一个无限长的表示(见这个答案)。

有理数的有限长度表示只存在于某些基中。恰好有理数525/1000在基2中不具有有限长度表示;该基数中的表示为0.100001(1001)。它在基数10中具有有限长度表示(以及其他)。

CCD_ 3在基数10中仅具有无限长的表示。数字0.52500000000000002被截断为覆盖IEEE-754双精度二进制表示中的尾数比特的数量的小数位置的数量。

由于floatdouble是基于2的系统中的位置表示,您应该预料到,任何非整数实数都需要一个无限长的表示才能准确地表示,并且只有一些能够以有限长度表示。

这是一个已知的问题。或者,更确切地说,根本不是一个问题,这就是为什么它在没有修复的情况下被关闭的原因。

这不应该是一个问题:您不应该依赖于在其所有数字中都具有特定值的double。考虑到合理的ε偏差/精度。

最新更新