str2double conversion error
8 次查看(过去 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
0 个评论
采纳的回答
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 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!