更新:事实证明只是LabView搞砸了。即使是整数也没有正确通过。删除并重新创建一些节点解决了这个问题。
我编写了一个由LabView工程师使用的.Net 3.5程序集。它至少是LabView 7,但我认为更高。我的程序集中的方法是返回一个对象数组,其中每个实例都具有类型decimal
的属性(以及其他内容)。 LabView工程师没有特别喜欢,只是将序列转储到VI的前端,并且这些十进制属性中的每一个看起来都非常小的浮点数。实际的十进制数可能是740.0,但它在LabView中看作双精度值,其值为8.12345E-315。这已经过了几个数量级了!
字符串和布尔属性正好通过。
知道为什么会这样吗?
编辑:我们使用一个带有一些十进制字段和属性的非常简单的类来测试它,它在LabView中运行得非常好。这个DLL有一些可疑的东西,所以我们正在尝试其他一些测试,看看我们是否可以使用不同的DLL复制问题。以下是一些更改端序的测试的屏幕截图。交换我们的简单测试类的属性的endian类型产生相同的值。从真实类库中交换小数的endian类型只会产生不同的小浮点数。
答案 0 :(得分:3)
LabVIEW double是Big Endian中的64位浮点数(因为它的Mac传统)。您的小数可能会有所不同。 如果要在LabVIEW端修复它,可以使用以下代码:
也许他应该改变周围的转换常数。
答案 1 :(得分:1)
它闻起来像一个糟糕的演员,LabVIEW认为decimal
是一个双精度或单精度浮点数。在将decimal
传递给LabVIEW之前,应该将decimal
显式转换为标准浮点数。请注意,您将丢失精度数字。或者,找到一个与LabVIEW中{{1}}精度匹配的数字类型,并进行正确的转换。
答案 2 :(得分:0)
这是我可以做的解决方法:
创建一个更改接口的适配器类,以使用支持良好的数据类型(如double),然后在LabView中使用此适配器类而不是原始类。
答案 3 :(得分:0)
尝试删除并重新创建属性访问节点。有时LabView会混淆并混淆数据。