【发布时间】:2017-02-17 22:01:11
【问题描述】:
重 JS 的声明性用户界面语言 QML 的一个特殊方面是它包含看似多余的十进制数字类型。
本机类型为十进制数声明了两个 basic types,它们的名称与许多其他编程语言中的名称相似:real 和 double。
当前文档 (v5.8) 中的表格将 double 描述为...
带小数点的数字,以双精度存储。
...对于real...
带小数点的数字
现在有点奇怪。前面的段落可能会让人相信,与大多数语言一样,这些确实是基于浮点精度的不同类型(参见:C/C++ 中的float 和double)。
但是这个假设被证明是不正确的。 realstates的文档:
注意:在 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 或反之亦然吗?
【问题讨论】:
标签: qt types double qml decimal