gpt4 book ai didi

qt - qt中的数字到字符串转换

转载 作者:行者123 更新时间:2023-12-02 07:37:37 25 4
gpt4 key购买 nike

我在数字(浮点数)到字符串转换中发现了一些奇怪的东西..

这是示例代码。

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QString>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

qDebug()<<QString::number(50.5, 'f', 0);
qDebug()<<QString::number(49.5, 'f', 0);

return a.exec();
}

这里的输出是
Starting /home/asit/qt/qstring1-build-desktop/qstring1...
"50"
"50"

输出应该是 51 和 50。有人能说出这个输出背后的原因吗?

最佳答案

浮点数的问题在于它们不能
准确地表示。所以 49.5 可能存储为一个略大于 49.5 的数字。这同样适用于 50.5,但这个数字可能存储为一个略小于 50.5 的数字。

这让我之前在 Linux 上尝试并转换一个
双到一个整数。举个例子

double value = 0.3;
int result = static_cast<int> (value * 1000);

在例如 Solaris SPARC 上,您将如预期的那样获得 300。和
Linux 上的 gcc 是 299。为什么?嗯,虽然两者
通过四舍五入将 double 转换为 int,在 gcc on
Linux double 被分配给一个 FPU 80 位寄存器
它由一个略小于的数字表示
0.3.在 Solaris 上(实际上大多数其他系统,包括
VC++) 将 double 分配给 64 位寄存器
它表示为略大于 0.3。

如果您想确保将数字四舍五入到正确的值,只需在转换之前添加 0.5 或使用 qRound() 即可。

关于qt - qt中的数字到字符串转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14814782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com