2015-11-16 76 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'。 –