str2double function for HEX values
Afficher commentaires plus anciens
I'm using str2doule to converter a cell with mixed value types. the input may be 0.123 or 0x1a, 0x1A, 0xAB, 0X1a, 0x1A, 0xAB.
I found str2double("0x1a") can return the right result 26, but str2double("0x1e") will return NaN.
The test is under version '9.11.0.2911900 (R2021b) Update 8'.
Is any other suggested way to converter values like this.
Thanks.
2 commentaires
Stephen23
il y a 4 minutes
"I found str2double("0x1a") can return the right result 26, but str2double("0x1e") will return NaN."
Apparently because the exponent gets detected before the base. Which is worthy of a bug report.
With %f, the sscanf doc page says that numeric field type is a "floating point number."
The str2double doc says "Text that represents a number can contain digits, a comma (thousands separator), a decimal point, a leading + or - sign, an e preceding a power of 10 scale factor ..."
Based on the doc pages should we expect str2double to correctly process hex strings? I'm not sure (even though it does for any input that does not end in "e")?
Also, the doc recommendation to replace str2double() with double(string()) dosn't work with hex strings
str2double({'0x1'})
double(string({'0x1'}))
Réponses (1)
C = {'0.123', '0x1a', '0x1A', '0xAB', '0X1a', '0x1e', '12.5'};
V = cellfun(@convertValue, C)
function val = convertValue(txt)
val = str2double(txt);
if isnan(val)
val = hex2dec(txt);
end
end
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!