Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 MATLAB和.NET,System.Double显示为整数

我将.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提取为结构并在您遍历字段时进行转换。



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:51


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.