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:
类型"真实"被记录为单精度浮点数,但是 那是不对的。它总是翻倍。
然而,类型"真实&#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
中是否还有其他理由使用float
与QML
或反之?
答案 0 :(得分:3)
这是因为保持向后兼容的传统。
在Qt4中它是一个浮动。在Qt5中,real
和double
的旧代码可以运行,但QML引擎的实现不再需要使用浮点数了。