MATLAB Answers

How to round the decimals?

1,611 views (last 30 days)
Isti
Isti on 3 May 2012
Commented: Walter Roberson on 7 Feb 2020 at 20:26
I have a number X = 0.135678
Then i just want to round it become 0.14. What to do?
Use round(X) will only give "0".
Thanks before :)

  4 Comments

Show 1 older comment
Vida
Vida on 11 Feb 2014
For many reasons, for one, you have many decimal points and you export to excel the data for distribution and others want to manipulate data further. You want your data to be represented 2 decimal points because it makes sense to look at. And also you want it to be precise so any further manipulation of data would not be compromised.
Kamania Ray
Kamania Ray on 6 Nov 2015
And because a lot of us are taking CS 1371 at Tech and out TAs like us to do this.
Stephen Cobeldick
Stephen Cobeldick on 11 Nov 2015
It probably helps to understand the visualization of data as being quite distinct from its storage in memory.
Certainly it is nice to see values with two decimal digits in Excel, but this is related to displaying of data (i.e. formatting in Excel), and not to how the data is stored in memory. Changing the formatting of a cell in Excel does not change its stored value, even if it displays different numbers of decimal digits. Similarly in MATLAB it makes more sense to keep all the numeric precision possible while calculating and storing a value, and considering displaying of that value as a separate task.
Unless there is a good reasons to change the stored data value then both MATLAB and Excel can handle those extra digits without breaking sweat: rounding does not save memory or make computations faster.

Sign in to comment.

Accepted Answer

Jos (10584)
Jos (10584) on 11 Feb 2014
Edited: Stephen Cobeldick on 11 Nov 2015
A = [pi exp(1) 1/7]
Ndecimals = 2
f = 10.^Ndecimals
A = round(f*A)/f

  1 Comment

Marc Lalancette
Marc Lalancette on 13 Oct 2015
Divide by f, not A.

Sign in to comment.

More Answers (8)

Junaid
Junaid on 3 May 2012
This also works.
X = 0.135678;
Y = sprintf('%.2f',X)
You can set as many decimals as you want.

  6 Comments

Show 3 older comments
Daniel
Daniel on 4 Mar 2015
Thanks!
Joep
Joep on 11 Nov 2015
Very unconventional way to use. Converting from str2num and otherwise are "slow" process. It works but it is a real meshing solution. I prefer
round(X, n)
X your number witch you want to round, n the decicmals (- behind the comma/dot)
Stevilinsko
Stevilinsko on 21 Nov 2016
Joeps way only works with Matlab Versions starting at R2014b :/

Sign in to comment.


Walter Roberson
Walter Roberson on 3 May 2012
Computationally it cannot be done: binary floating point arithmetic is not able to exactly represent most multiples of 0.01.

  0 Comments

Sign in to comment.


Steven Lord
Steven Lord on 7 Nov 2016
As of release R2014b you can use the round function in MATLAB to round to a specific number of decimal places.

  0 Comments

Sign in to comment.


Wayne King
Wayne King on 3 May 2012
One way here is:
X = 0.135678;
format bank;
X
Another way is:
format; %just returning the formatting
X = ceil(X*100)/100;
Probably the last way is the best because you don't have to mess with the formatting.

  2 Comments

Isti
Isti on 3 May 2012
thanks :)
Jos (10584)
Jos (10584) on 11 Feb 2014
Use round instead of ceil!

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 3 May 2012
use roundn from Mapping Toolbox
roundn(X,-2)

  0 Comments

Sign in to comment.


Prateek Sahay
Prateek Sahay on 7 Nov 2016
If you want to round 1.556876 to three decimal places then multiply it with 1000 and the use round command and then again divide it by 1000. X=1.556876 X=X*1000 Means now X=1556.876 round(x) Means now X=1556.9 X=X/1000 Means now X=1.5569

  1 Comment

Walter Roberson
Walter Roberson on 7 Nov 2016
Note that the result of the round() would be 1557 not 1556.9
Note that the result will not be exact. There is no way to represent exactly 1.557 in binary floating point. The closest it gets is 1.556999999999999939603867460391484200954437255859375
This will display as 1.557 in most output modes, but it will not be exactly that value.

Sign in to comment.


Jason Garcia
Jason Garcia on 7 Feb 2019
Edited: Jason Garcia on 7 Feb 2019
Maybe not exactly what you're looking for, but if you are looking for ceiling or floor measurements the below is a fun way to specifiy directly how you want to bin the array/value.
X = rand(100,1); %Rand 100 elmnt vector w/ range 0-1.
n = 100; %Use 100 for the nearest tenth.
cX = discretize(X,[0:1/n:1],[0+1/n:1/n:1]); %Rounds X UP to nearest 1/N.
%OR
fX = discretize(X,[0:1/n:1],[0:1/n:1-1/n]); %Rounds X DOWN to nearest 1/N.

  0 Comments

Sign in to comment.


Aaina
Aaina on 7 Feb 2020 at 14:44
I have a set of program using matrix/array, how can I change the program if I want to use only one value/integer:
function [y1, y2]=crossover(x1,x2,minval1,maxval1,minval2,maxval2)
alpha=rand(size(x1));
y1=alpha.*x1+(1-alpha).*x2;
y2=alpha.*x2+(1-alpha).*x1;
tmbv=round(y1(1:4)); % change only one value
val=unique(tmbv);
for k3=1:length(val)
logh=find(tmbv==val(k3));
if(length(logh)~=1)
tmbv(logh(1))=tmbv(logh(1))+1;
end
end
y1(1:4)=tmbv; % change only one value
tmbv=round(y2(1:4)); % change only one value
val=unique(tmbv);
for k3=1:length(val)
logh=find(tmbv==val(k3));
if(length(logh)~=1)
tmbv(logh(1))=tmbv(logh(1))+1;
end
end
y2(1:4)=tmbv; % change only one value
y1=[round(y1(1:4)) y1(5:end)]; % change only one value
y2=[round(y2(1:4)) y2(5:end)]; % change only one value
for k1=1:4
if(y1(k1)<minval1)
y1(k1)=minval1;
end
if(y2(k1)<minval1)
y2(k1)=minval1;
end
if(y1(k1)>maxval1)
y1(k1)=maxval1;
end
if(y2(k1)>maxval1)
y2(k1)=maxval1;
end
end
for k1=5:8
if(y1(k1)<minval2)
y1(k1)=minval2;
end
if(y2(k1)<minval2)
y2(k1)=minval2;
end
if(y1(k1)>maxval2)
y1(k1)=maxval2;
end
if(y2(k1)>maxval2)
y2(k1)=maxval2;
end
end
end

  1 Comment

Walter Roberson
Walter Roberson on 7 Feb 2020 at 20:26
This does not appear to have anything to do with the topic of rounding decimals. Please create a new Question for this, and when you do, explain further what it is you want to do.

Sign in to comment.

Sign in to answer this question.


Translated by