【问题标题】:Native function or logic to test if string is a single real number用于测试字符串是否为单个实数的本机函数或逻辑
【发布时间】:2014-08-05 16:25:00
【问题描述】:

我在 GUI 中有相当数量的编辑框。他们中的大多数必须接受一个实数。如果输入不是单个实数,我想返回 errordlg。

在获取编辑框的字符串时,我一直在使用str2num 和一些额外的检查,例如isreal。示例如下:

    total_units_buffer = str2num(get(handles_gui.edit_totalunits,'string')); 
    % Check if input is number and real
    if (~isempty(total_units_buffer) && isreal(total_units_buffer))
        % Do stuff
    end

通常,当输入不是数字时,输出是[],所以我也一直使用isempty 作为测试。但是,我最近发现,如果输入中有i,例如10i,它会将数字读取为虚数,而不是返回[]。我最近还发现,如果您在输入中添加一个空格,例如10 10,那么str2num 会将其读取为两个数字,这打破了我现在的逻辑。此外,NaN 也将被读取为数字。

基本上,我不断发现这些小事,需要我更新我对单个实数的测试。

所以我想知道,在 Matlab 中是否有一个本地函数来测试字符串是否是单个实数?或者,反过来说,有没有一个有保证的逻辑,绝对保证这个数字是一个实数?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    以下应该足够了

    str =  %// your String 
    
    x = str2double(str)
    y = isfinite(x) && isreal(x)
    

    你也可以考虑这样的事情:

    y = ~all(x-real(x))
    

    我刚刚看到,对于像str = '5,0' 这样的输入,这两种方法都失败了。这将是 50 肯定不想要的。您可以通过添加以下行来避免这种情况:

    str = strrep(str,',','.')
    

    【讨论】:

    • 好吧,就我而言,isfinite 比 isnan 更好,因为它涵盖了 NaN 和 inf 字符串输入,对吗?不过,我仍然不确定这个逻辑是否详尽。
    • 我无法想象它不应该工作的情况。是的,isfinite 还涵盖了输入为inf 的情况,而~isnan 没有。一般来说,对于第一种情况,您有多种选择(isfinite 应该涵盖所有内容),但没有办法绕过isreal。
    • 嗯...好吧,我对这个答案感觉很好,但我要等一会儿,然后再接受,看看是否会弹出任何其他内容。谢谢
    • 看看我的其他建议,但实际上没有意义;)
    猜你喜欢
    • 2013-11-03
    • 1970-01-01
    • 2010-12-17
    • 2013-08-07
    • 1970-01-01
    • 2014-11-05
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多