# How can I convert a binary fraction to decimal?

53 views (last 30 days)
RD on 16 Jun 2019
Commented: Jan on 28 Nov 2019
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')

Jan on 16 Jun 2019
Edited: Jan on 28 Nov 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))))
% [EDITED] Typo fixed: ^ this was \ before

John D'Errico 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.
David K on 27 Nov 2019
This is great, thank you! I think you have a typo in your last code block though. I believe the ldivide on the last line should actually be a rdivide.
Jan on 28 Nov 2019
Thanks David K. Typo fixed now.