截断matlab中的十进制数?

时间:2017-08-24 02:01:11

标签: matlab rounding

在MATLAB中是否有一种快速简便的方法可以截断十进制数,例如超过4位?

Converter<A, B> extends Function<A, B>没有帮助,它仍在四舍五入。我必须在for循环中使用它,所以最快的方式是值得赞赏的。

感谢您的投入。

5 个答案:

答案 0 :(得分:9)

这是截断小数点后d个数字的一​​种方法。

val = 1.234567;
d = 4;
val_trunc = fix(val*10^d)/10^d

结果

val_trunc =

   1.2345

如果您知道val是肯定的,那么floor()将取代fix()

答案 1 :(得分:8)

又一个选择:

x = -3.141592653;
x_trun = x - rem(x,0.0001)

x_trun =

    -3.1415

感谢gnovice的更新。

一般来说,对于n小数位:

x_trun = x - rem(x,10^-n)

答案 2 :(得分:5)

如果你想要保留最后一个小数后从小数中减去5,则截断就像舍入一样。

因此,要将x截断为n小数,请使用

round(x - sign(x)*.5/10^n, n)

(感谢@gnovice注意sign(x)需要处理负数。)

例如,

format long
x = 3.141592653589793;
for n = 2:5
    result = round(x - sign(x)*.5/10^n, n);
    disp(result)
end

给出

   3.140000000000000
   3.141000000000000
   3.141500000000000
   3.141590000000000

答案 3 :(得分:4)

当你要求使用最快的方法时,我已经对这里目前回答的前3种截断方法进行了快速基准测试。请参阅下面的代码。我使用x函数将timeit向量的大小增加为四舍五入。

function benchie()
    % Set up iteration variables
    K = 17;  n = 4;  T = zeros(K,3);
    for k = 1:K
        x = rand(2^k,1);
        % Define the three truncation functions
        LuisRound = @() round(x - 0.5/10^n, n);
        JodagFix = @() fix(x*10^n)/10^n;
        InfoRem = @() x - rem(x,10^-n);
        % Time each function
        T(k,1) = timeit(LuisRound);
        T(k,2) = timeit(JodagFix);
        T(k,3) = timeit(InfoRem);
    end
    % Plot results
    figure
    plot(2.^(1:K), T); legend('LuisRound', 'JodagFix', 'InfoRem');
    grid on; xlabel('number of elements in x'); ylabel('time taken');
end

结果图可以在这里看到:

plot

根据此测试, jodag 建议的fix方法明显更快,因此您应该使用类似这样的内容来自定义截断函数{ {1}}小数位:

n

测试:

function y = trunc(x, n)
%% Truncate matrix/scalar x to n decimal places
    if nargin < 2; n = 0; end; % default to standard fix behaviour if no n given
    y = fix(x*10^n)/10^n;      % return value truncated to n decimal places
end

答案 4 :(得分:0)

使用我的round2函数:

function result = round2(x,accuracy)
    if nargin<2, accuracy=1; end %default accuracy 1 same as 'round'
    if accuracy<=0, accuracy=1e-6; end
    result=round(x/accuracy)*accuracy;
end

常用:round2(3.14159,0.01)但您也可以使用它来舍入到其他所有多重符号,例如:round2(number,2)将舍入到偶数,或round2(number,10)等。