PDA

查看完整版本 : MATLAB和.NET,System.Double显示为整数


poster
2019-12-10, 20:48
我将.NET Dll成功集成到了MATLAB中。一切都很好。但是,我传递了一个类似6000.46的System.Double值,并以[valueFromDotNet]的形式在MATLAB函数中返回它,MATLAB的ans为ans = 6000,但我希望至少ans = 6000.4600有任何人知道我要看的地方?

编辑1:我确保格式短。 (如果get(0,'Format'))并且我也将格式设置为long;什么也没有变。任何人都知道为什么会这样。

编辑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 结果是这个价格包括分数



回答:

可能发生的情况是,返回的其他那些值之一是整数类型,这导致在将它们串联时将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提取为结构并在您遍历字段时进行转换。



更多&回答... (https://stackoverflow.com/questions/3777641)