How to convert negative numbers in parentheses (bank-formatted text) to numbers with minus sign?
조회 수: 10 (최근 30일)
이전 댓글 표시
I like to find a function or a better way to convert (9,999) to -9999. This problem occurs when I use readtable(...) to read an html file that has a financial report. In it, the negative currency is encoded in bank-formatted text. For example, (1,234) means -1234.
In detectImportOptions(...) or HTMLImportOptions, there seems to be no option to set for detecting bank-formatted negative currency.
I have searched for any solution. The closest relevant information I found is the function, BankText = cur2str(Value,Digits), in the Financial Toolbox. It converts negative numbers to numbers in parenthesis, the opposite of what I want.
Any suggestion?
댓글 수: 0
채택된 답변
Chunru
2022년 8월 7일
xbank = [" (1,234)" "2,345,678" "(1,234.56)"]
x = arrayfun(@bank2double, xbank)
function x = bank2double(s)
s = strrep(strtrim(string(s)), ',', '');
x = sscanf(s, '%f');
if isempty(x)
x = -sscanf(s, '(%f)');
end
end
추가 답변 (2개)
Walter Roberson
2022년 8월 7일
Use detectImportOptions and then modify the options to set that column to character or string type. Then regexprep() the column, using {'[,\)]', '('}, {'', '-'}
Then str2double the result
That is, get rid of comma and ) characters and change any remaining ( to -
댓글 수: 3
Walter Roberson
2022년 8월 9일
By using the Prefix and Suffix options you could probably get the () stripped automatically. But that would not permit you to detect which lines had the () and so needed to be negated.
Post-processing is easier.
참고 항목
카테고리
Help Center 및 File Exchange에서 Characters and Strings에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!