在QML中,Double现在完全等同于Real吗?

时间:2017-02-17 22:01:12

标签: qt types double qml decimal

JS重型声明性用户界面语言QML的一个特殊方面是它包含看似冗余的十进制数字类型。

原生类型为十进制数声明了两个basic types,其名称与许多其他编程语言中的名称相似:realdouble

当前文档(v5.8)中的表格将double描述为......

  

带小数点的数字,以双精度存储。

...以及real ...

  

带小数点的数字

现在奇怪的一点。之前的段落可能会让人相信,与大多数语言一样,这些确实是基于浮点精度的不同类型(参见:C / C ++中的floatdouble)。

但该假设被认为是不正确的。 real states的文档:

  

注意:在QML中,所有实数都以双精度存储,IEEE浮动   点格式。

     

这种基本类型由QML语言提供。

好吧,有点奇怪(为什么有两种类型),但假设这是完全准确的,那么预定选择一个(也许你的代码库中的标准是你正在进行的工作)并且去用它。

但据报道,这是一个意想不到的问题as noted by Kent Hansen on QtDeclarative

  

类型"真实"被记录为单精度浮点数,但是   那是不对的。它总是翻倍。

     

然而,类型"真实&#34>的信号参数;将被映射到C ++   键入" qreal",可以是float或double,具体取决于   平台。

     

由于JavaScript浮点数具有双精度,QML   应该使用相同的,以避免潜在的精度损失。

这让我怀疑Qt文档中的陈述是否完全准确。 Hansen的帖子是在4年前,当Qt / QML v5.1-2是最新版本时。现在我们在v5.6-8,所以我想知道他报告的内容是否还是个问题。

有人可以回答最新的Qt / QML发布版本(v5.6-8,截至2017年2月)是否仍存在此或其他不一致之处吗?

这是为什么包括两个单独的十进制数基本类型,尽管文档似乎表明它们是相同的?

double中是否还有其他理由使用floatQML或反之?

1 个答案:

答案 0 :(得分:3)

这是因为保持向后兼容的传统。

在Qt4中它是一个浮动。在Qt5中,realdouble的旧代码可以运行,但QML引擎的实现不再需要使用浮点数了。