QML 中的 Double 现在完全等价于 Real 吗?
Posted
技术标签:
【中文标题】QML 中的 Double 现在完全等价于 Real 吗?【英文标题】:Is Double Now Fully Equivalent to Real in QML? 【发布时间】:2017-02-17 22:01:11 【问题描述】:重 JS 的声明性用户界面语言 QML 的一个特殊方面是它包含看似多余的十进制数字类型。
本机类型为十进制数声明了两个 basic types,它们的名称与许多其他编程语言中的名称相似:real
和 double
。
当前文档 (v5.8) 中的表格将 double
描述为...
带小数点的数字,以双精度存储。
...对于real
...
带小数点的数字
现在有点奇怪。前面的段落可能会让人相信,与大多数语言一样,这些确实是基于浮点精度的不同类型(参见:C/C++ 中的float
和double
)。
但是这个假设被证明是不正确的。 real
states的文档:
注意:在 QML 中,所有实数都以双精度、IEEE 浮点数存储 点格式。
这种基本类型是由 QML 语言提供的。
好吧,有点奇怪(那么为什么有两种类型),但假设这是完全准确的,大概选择一个(也许是你正在处理的代码库中的标准)并使用它是有意义的.
但据说有一个意想不到的问题,as noted by Kent Hansen on QtDeclarative:
“real”类型被记录为单精度浮点数,但 这是不正确的。一直都是双倍的。
但是,“real”类型的信号参数将映射到 C++ 输入“qreal”,它可以是浮点数或双精度数,具体取决于 平台。
由于 javascript 浮点数具有双精度,QML 应该使用相同的,以避免潜在的精度损失。
这让我怀疑 Qt 文档中的陈述是否完全准确。 Hansen 的帖子是 4 年前的,当时 Qt
/QML
v5.1-2
是最新版本。现在我们在v5.6-8
,所以我想知道他报告的内容是否仍然是一个问题。
谁能回答最新的Qt
/QML
发布版本(v5.6-8
,截至 2017 年 2 月)中是否仍然存在这种或任何其他不一致?
这就是为什么包含两种不同的十进制数基本类型的原因,尽管文档似乎表明它们是相同的?
还有其他理由在QML
中使用double
与float
或反之亦然吗?
【问题讨论】:
【参考方案1】:这是因为保持向后兼容性的传统。
在 Qt4 中它是一个浮点数。在 Qt5 中 real
和 double
的旧代码可以运行,但 QML 引擎的实现不需要再为浮点数操心了。
【讨论】:
那么signal
在c++
代码中被转换为float
的问题解决了吗?请注意,作者指出问题在Qt5
。你可以添加一个链接到适当的错误跟踪器,确认吗?如果是这样,我可以将此答案标记为正确。
我仍然认为,如果您使用 -float
标志编译 Qt - 那么它将是浮动的。看起来不是问题/错误,而是一些嵌入式平台的快速性能破解。
太好了,我很感激最终的确认/澄清...我正在处理的大部分代码库都使用real
,所以我很高兴听到这意味着我可以移动挥之不去的double
实例,无后顾之忧!感谢您的安心!以上是关于QML 中的 Double 现在完全等价于 Real 吗?的主要内容,如果未能解决你的问题,请参考以下文章