I am pulling financial data into Matlab from SQL, where it is unfortunately stored as a ‘Real’ (which is an approximate data-type).
For example, a value got loaded into SQL as “96.194” which is the correct value (this could have any number of decimals 1-5). I know in SQL it is stored as something like 96.19400024 because it is an approximation, but SQL Server somehow knows to display it as 96.194.
When I pull it into matlab, it gets pulled in as 96.194, which is what I want. Unfortunately, it turns out it’s not actually 96.194, as demonstrated:
>>price
price =
96.194
>> price==96.194
ans =
0
>> class(price)
ans =
single
>> double(price)
ans =
96.1940002441406
So my question is, is there a way to convert a single to a double exactly as it appears as a single (i.e. truncate all the decimals which are the approximation? Note: I cannot just round it because I don’t know how many decimals it’s supposed to have.
The vpa function lets you specify a number of significant (nonzero) digits that is different from the current digits setting. For example:
or in your case:
(6 or 8 significant digits will yield the same result)
Edit
To use vpa you’ll need the Symbolic Math Toolbox, there are alternatives found on the web, such as this FEX file.