如何确定输入是Matlab中的比率还是浮点数?

时间:2018-12-15 16:28:56

标签: matlab floating-point scanf fractions

我需要批量处理混合单位的文本文件,即整数比和浮点数(它们是未知有理数或无理数的比例对数近似值)。 Matlab如何检测哪个输入是哪个?扫描为“。”或'/'字符最好?

252.63

4/3

757.89

2/1

在此示例中,我认识到数字代表升序值(但以混合单位表示,这是我的研究领域中的典型值),我将处理252.63和757.89的方式与4/3和2/1的方式不同。 / p>

我没有在Matlab中找到像isa(x, 'rat')这样的函数,其中 x 是上面列表中的任何一行,而'rat'是比率。

2 个答案:

答案 0 :(得分:3)

Matlab可以非常简单地在字符串中搜索特定字符。

slashmask     = str == '/'; % returns false for every character in str that's not a slash, and true for every one that is.
slashdetected = any(slashmask); % returns false if no character is a slash.

如果您要做的只是获取比率并求值,然后以与浮点数相同的方式使用它,则只需使用“ eval”函数即可检索等效的浮点数。

答案 1 :(得分:1)

谢谢您的提示。在您的帮助下,我确定了这一点(每行数据文件):

x = fgetl(fileId);
if isnan(str2double(x)) == true
    % Interpret string as ratio number
    x = str2num(x);
    % then convert to musical cents,
    s(i) = log(x) / log(2) * 1200;
else
    % convert string to float, already in cents.
    s(i) = str2double(x);
end