如何格式化uicontrol的字符串以不使用科学记数法?

时间:2013-06-13 16:23:25

标签: matlab user-interface matlab-guide

我在matlab中使用popupmenuuicontrol。但是,大于100万的数字用科学记数法表示:

That just looks weird

使用以下代码生成:

sPropGrid = uiextras.Grid('Parent', staticPropPanel);
...
self.nSamplesEdit = uicontrol('Style', 'popupmenu', 'Parent', sPropGrid, ...
                'String', {[256 16384 32768 65536 131072 262144 524288 1048576 2097152 16252928]});

我想停止此操作,并以正常格式显示整个数字。我该怎么做?

1 个答案:

答案 0 :(得分:2)

实施例子:

f=figure;
L=uicontrol('parent',f,'style','popupmenu','string',{'1','2','6000000'});

未显示此行为。

生成这些值的代码是什么?由于popupmenu使用字符串的单元格数组来表示其值,因此生成GUI的代码很可能正在使用

sprintf('%0.5g',value);

沿着这些行输入值到popupmenu的东西。如果将其更改为

sprintf('%d',value); 

sprintf('%.0f',value);

对于浮点值(尽管样本数应该是整数,我想),它应该具有你想要的行为。

编辑:

除了回答你的额外信息。

要使用sprintf按照您希望的格式使用数值数组,您可以将此语法用于任意数组X:

arrayfun(@(x) {sprintf('%d',x)},X);

所以在弹出菜单中你可以使用:

self.nSamplesEdit = uicontrol('Style', 'popupmenu', 'Parent', sPropGrid, ...
    'String', arrayfun(@(x) {sprintf('%d',x)},...
    [256 16384 32768 65536 131072 262144 524288 1048576 2097152 16252928]));