所以我创建了一个应用程序来根据一系列变量计算出一个值(参见this gist中的完整代码)。变量是:
这是应用程序的样子:
为了简化这个过程,我决定将性别选择作为下拉菜单,这引起了一些问题,因为我设置了这样的问题:
与按钮相关的数学看起来像这样:
function CalculateButtonPushed(app, event)
gender = app.PatientGenderDropDown.Value ;
age = app.PatientAgeEditField.Value ;
weight = app.LeanBodyWeightEditField.Value ;
serum = app.SerumCreatinineEditField.Value ;
final = (gender*(age)*weight) / (serum) ;
app.ResultEditField.Value = final ;
end
end
运行此命令会出现以下错误:
使用时出错 matlab.ui.control.internal.model.AbstractNumericComponent / set.Value (第104行)'价值'必须是数字,例如10。
据我所知,我输入ItemsData
的值是数值。我错过了什么或者有更好的方法吗?
谢谢,
詹姆斯
答案 0 :(得分:1)
如果在相应行上的违规文件中放置断点(通过运行以下代码),
dbstop in uicomponents\+matlab\+ui\+control\+internal\+model\AbstractNumericComponent.m at 87
点击按钮后,您可以在工作区中看到以下内容:
这里有两个不同的问题,可以通过查看newValue
验证码(显示在AbstractNumericComponent.m
中)来识别这两个问题:
% newValue should be a numeric value.
% NaN, Inf, empty are not accepted
validateattributes(...
newValue, ...
{'numeric'}, ...
{'scalar', 'real', 'nonempty'} ...
);
以下是问题:
新值是NaN
的向量 。
原因在于这一行:
final = (gender*(age)*weight) / (serum) ;
其中serum
的值为0
- 所以这是您应该照顾的第一件事。
新值为 NaN
的向量 。
这是一个单独的问题,因为set.Value
函数(当您将某些内容分配到Value
字段时隐式调用)预期会出现标量。这是因为gender
是1x4 char array
- 所以它被视为4个单独的数字(即假设ItemsData
为数字是不正确的)。在这种情况下,最简单的解决方案是在使用前str2double
。或者,将数据存储在另一个位置
(例如图中的私有属性),确保它是数字。