How can I convert a binary fraction to decimal?
조회 수: 20 (최근 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!