How can I convert a binary fraction to decimal?
33 次查看(过去 30 天)
显示 更早的评论
采纳的回答
Jan
2019-6-16
编辑:Jan
2019-11-28
'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
3 个评论
David K
2019-11-27
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.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!