MATLAB和.NET,System.Double显示为整数

时间:2010-09-23 11:01:55

标签: .net matlab

我成功将.NET Dll集成到MATLAB中。一切都是好的。但是,我传递一个值为6000.46的System.Double,并将其作为[valueFromDotNet]返回给MATLAB函数 MATLAB的ans是ans = 6000,但我预计至少ans = 6000.4600 我有什么想法吗?

编辑1: 我确保格式很短。 (如果得到(0,'格式')),我也设置格式长; 什么也没有变。任何人都知道为什么会这样。

编辑2: 发现了问题。我收到了从外部服务提供给MATLAB的数据。这些数字形成为字符串,但始终为“6000.46”;我用CultureInfo.InvariantCulture解析,但这似乎是错误的。将其更改为新的CultureInfo(“en-US”),现在可以使用了!

编辑3: 我太兴奋了。它仍然是stange。但我认为现在只是不知道数学运算是如何工作的

我有这个回调

function tbmxHandleTickEvent(source,arg)
   t = arg.Tick;
   [t.BidPrice t.AskSize t.AskPrice t.LastSize t.LastPrice]
end

回调由.NET事件触发 使用这个,我得到没有分数的价格值

当我像这样更改回调时

function tbmxHandleTickEvent(source,arg)
   t = arg.Tick;
   t.BidPrice
end

结果是这个价格包括分数

2 个答案:

答案 0 :(得分:2)

可能发生的是返回的其他值之一是整数类型,并且当连接它们时导致双重转换。与大多数其他编程语言不同,当组合浮点和整数类型时,Matlab会将浮点(双精度)值缩小为整数类型,而不是加宽整数类型。

这是R2009b中的一个例子。

>> x = [6000.46 int32(1)], class(x)
x =
        6000           1
ans =
int32
>> 
>> 6000.46 + int32(1)
ans =
        6001

您可以通过启用此有损转换的警告来诊断此问题,至少是连接问题。尝试这样做并重新运行代码。

>> warning on MATLAB:intConvertNonIntVal
>> x = [6000.46 int32(1)]
Warning: Conversion rounded non-integer floating point value to nearest int32 value. 
x =
        6000           1
>> 

如果这是正在发生的事情,你应该明确地将arg.Tick中的所有int值转换为double。也许通过将arg.Tick提取到结构中并在逐步遍历字段时进行转换。

答案 1 :(得分:0)

首先要看的是Matlab控制台中数字的格式 - 确保数字为6000而不是6000.46而不是小数部分。