Сначала я разделяю целочисленную часть и плавающую часть с плавающим значением с 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 заранее
Причина заключается в том, что '5.678-5 == 0.678' возвращается '0', т.е. 'false' из-за арифметики с машинной точностью. Попробуйте добавить 'eps' в ваш остаток:' float_part = x-int_part + eps'. Некоторая информация: http://stackoverflow.com/questions/686439/why-is-24-0000-not-equal-to-24-0000-in-matlab –
Показать больше цифр, используя формат 'long g', чтобы увидеть, как' 5.678' хранится. – Matt