How can I convert a binary fraction to decimal?

RD (view profile)

on 16 Jun 2019
Latest activity Edited by Jan

Jan (view profile)

on 16 Jun 2019
Accepted Answer by Jan

Jan (view profile)

To convert from binary to decimal I use this function: bin2dec('1001')
But how I could like to know how can I convert binary fractions to decimal, just like this: bin2dec('0.110001')

on 16 Jun 2019
Edited by Jan

Jan (view profile)

on 16 Jun 2019

'11001' means: 1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 + 1*2^4 or:
[1,1,0,0,1] * 2 .^ (4:-1:0).'
(this is what happens inside bin2dec - examine its source code.)
'0.10011' means: 1*2^-1 + 0*2^-2 + 0*2^-3 + 1*2^-4 + 1*2^-5, or:
[1,0,0,1,1] * 2 .^ (-1:-1:-5).'
So all you have to do is to split the part before and after the decimal dot and to convert the character to numbers. Both is easy in Matlab:
S = strsplit('11001.10011', '.');
intV = S{1} - '0';
fracV = S{2} - '0';
intValue = intV * (2 .^ (numel(intV)-1:-1:0).')
fracValue = fracV * (2 .^ -(1:numel(fracV)).')
% or:
sum(fracV .\ (2 .^ (1:numel(fracV))))

John D'Errico

John D'Errico (view profile)

on 16 Jun 2019
+1 of course. I once wrote a tool that goes the other way. Converting to decimal number to a binary "bicimal" form.