2015-11-16 35 views
0

首先我单独整数部分和与4个数字(例如5.678)的浮动值的浮动部分 接着我乘以1000的浮动部分获得的整数,并且然后把此整数为楼层的功能。Matlab/Octave floor(678.0)= 677.0?

x = 5.678 
int_part = floor (x)   % result is 5 
float_part = x - int_part  % result is 0.678 
float_part = float_part * 1000 % result is 678 
floor (float_part)    % returns 677 instead of 678 

这是怎么回事?我怎样才能让Matlab/Octave返回正确的值?

提前THX

+8

的原因是'5.678-5 == 0.678'回报'0',即。由于机器精度算术,“错误”。尝试为你的余数添加'eps':'float_part = x-int_part + eps'。一些信息:http://stackoverflow.com/questions/686439/why-is-24-0000-not-equal-to-24-0000-in-matlab –

+0

显示更多数字使用'格式长克'看看如何' 5.678'正在储存。 – Matt

回答

1
x = 5.678 
int_part = floor (x)   % result is 5 
float_part = x - int_part  % result is 0.678 
float_part = float_part * 1000 % result is 678 
floor (float_part)    % returns 677 instead of 678 
format long 
disp(float_part) 

答案是

6.779999999999999e+02 

所以地板(float_part)是

677 
+0

既然你添加了一个答案,我建议建议'round'而不是'floor'。 –