Reputation: 5056
I have the number: a = 3.860575156847749e+003;
and I would show it in a normal manner. So I write b = sprintf('%0.1f' a);
. If I print b
I will get: 3860.6
. This is perfect. Matter of fact, while a
is a double type, b
has been converted in char.
What can I do to proper format that number and still have a number as final result?
Best regards
Upvotes: 2
Views: 3615
Reputation: 4787
Well, you have to distinguish between both the numerical value (the number stored in your computer's memory) and its decimal representation (the string/char array you see on your screen). You can't really impose a format on a number: a number has a value which can be represented as a string in different ways (e.g. 1234 = 1.234e3 = 12.34e2 = 0.1234e4 = ...
).
If you want to store a number with less precision, you can use round
, floor
, ceil
to calculate a number which has less precision than the original number.
E.g. if you have a = 3.860575156847749e+003
and you want a number that only has 5 significant digits, you can do so by using round
:
a = 3.860575156847749e+003;
p = 0.1; % absolute precision you want
b = p .* round(a./p)
This will yield a variable b = 3.8606e3
which can be represented in different ways, but should contain zeros (in practice: very small values are sometimes unavoidable) after the fifth digit. I think that is what you actually want, but remember that for a computer this number is equal to 3.86060000
as well (it is just another string representation of the same value), so I want to stress again that the decimal representation is not set by rounding the number but by (implicitly) calling a function that converts the double to a string, which happens either by sprintf
, disp
or possibly some other functions.
Upvotes: 5
Reputation: 1130
Result of sprintf y a text variable. have you tried to declare a variable as integer (for example) and use this as return value for sprintf instruction?
This can be useful to you: http://blogs.mathworks.com/loren/2006/12/27/displaying-numbers-in-matlab/
Upvotes: 0