str2double conversion error

조회 수: 9 (최근 30일)
John Jendzurski
John Jendzurski 2020년 5월 30일
편집: Adam Danz 2020년 5월 30일
Is there a way to avoid this sort of error/effect (see code below) when converting a string to a double? I have tried using str2num() but get the same result.Thanks!
>> str2double('39.11237316')
ans =
39.112373159999997

채택된 답변

Adam Danz
Adam Danz 2020년 5월 30일
편집: Adam Danz 2020년 5월 30일
You're witnessing floating point roundoff error. In short, an infinite range of numbers must be represented in a finite number of bits (specifically, 64 for double precision numbers). The number you're trying to represent doesn't fit perfectly in this system so it's rounded.
Check this out.
format long
x = 39.11237316
% x =
% 39.112373159999997
% Even if you round it to 8 dp, it can't be represeneted
round(x,8)
% ans =
% 39.112373159999997
So, it's not the str2double() that is the problem, it's the finite precision that this number can be represented in.
If higher precision is required you can use symbolic representation for your computations. But the difference between your value and the value being represented is very tiny and usually not a problem.
For a wonderful explanation of floating point roundoff error, see Cleve Moler's article (founder of Matlab).
  댓글 수: 2
John Jendzurski
John Jendzurski 2020년 5월 30일
편집: John Jendzurski 2020년 5월 30일
That's a very helpful, clear, and excellent description of what is happening. Thanks, Adam!
Adam Danz
Adam Danz 2020년 5월 30일
Thanks for the feedback, John. Glad I could help.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by