2010-09-23 16 views
0

我成功将.NET Dll集成到MATLAB中。一切都很好。但是,我通过一个System.Double类似6000.46的值,并返回它在MATLAB函数[valueFromDotNet] 答案的MATLAB是答= 6000,但我预计至少答= 6000.4600 有任何人有我的想法看?MATLAB和.NET,System.Double显示为整数

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

编辑2: 发现问题。我收到我从外部服务提供给MATLAB的数据。那里的数字被格式化为字符串,但始终为“6000.46”;我用CultureInfo.InvariantCulture解析,但这似乎是错误的。将其更改为新的CultureInfo(“en-US”),现在就可以使用!编辑3: 我太激动了。它仍然是风格。但我认为它现在只是不知道mathlab如何工作

我有这个回调

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

可能发生的情况是,返回的其他值中的一个是整数类型,导致double在连接它们时被转换。与大多数其他编程语言不同,将浮点型和整数类型组合时,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到一个结构并转换,而你通过字段。

+0

谢谢。而已!帮助我很多! – esskar 2010-09-23 19:43:04

0

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

+0

谢谢。我试过类似valueFromDotNet == uint32(valueFromDotNet),它返回0.如何更改格式?我是matlab新手。谢谢。 – esskar 2010-09-23 11:46:30

+0

你可以在Matlab中使用格式命令,但你似乎已经明白了这一点。如果没有看到(某些)代码,很难提供进一步的建议。 – 2010-09-23 14:20:43