为什么LabView将小数转换为微小的浮点数?

时间:2014-01-27 21:57:16

标签: .net labview

更新:事实证明只是LabView搞砸了。即使是整数也没有正确通过。删除并重新创建一些节点解决了这个问题。

我编写了一个由LabView工程师使用的.Net 3.5程序集。它至少是LabView 7,但我认为更高。我的程序集中的方法是返回一个对象数组,其中每个实例都具有类型decimal的属性(以及其他内容)。 LabView工程师没有特别喜欢,只是将序列转储到VI的前端,并且这些十进制属性中的每一个看起来都非常小的浮点数。实际的十进制数可能是740.0,但它在LabView中看作双精度值,其值为8.12345E-315。这已经过了几个数量级了!

字符串和布尔属性正好通过。

知道为什么会这样吗?

编辑:我们使用一个带有一些十进制字段和属性的非常简单的类来测试它,它在LabView中运行得非常好。这个DLL有一些可疑的东西,所以我们正在尝试其他一些测试,看看我们是否可以使用不同的DLL复制问题。

以下是一些更改端序的测试的屏幕截图。交换我们的简单测试类的属性的endian类型产生相同的值。从真实类库中交换小数的endian类型只会产生不同的小浮点数。

http://i.imgur.com/WpZ8bYX.jpg

4 个答案:

答案 0 :(得分:3)

LabVIEW double是Big Endian中的64位浮点数(因为它的Mac传统)。您的小数可能会有所不同。 如果要在LabVIEW端修复它,可以使用以下代码: LabVIEW code snippet for endianness swap

也许他应该改变周围的转换常数。

答案 1 :(得分:1)

它闻起来像一个糟糕的演员,LabVIEW认为decimal是一个双精度或单精度浮点数。在将decimal传递给LabVIEW之前,应该将decimal显式转换为标准浮点数。请注意,您将丢失精度数字。或者,找到一个与LabVIEW中{{1}}精度匹配的数字类型,并进行正确的转换。

答案 2 :(得分:0)

这是我可以做的解决方法:

创建一个更改接口的适配器类,以使用支持良好的数据类型(如double),然后在LabView中使用此适配器类而不是原始类。

答案 3 :(得分:0)

尝试删除并重新创建属性访问节点。有时LabView会混淆并混淆数据。