这两个长号除了最后一位外是一样的。
测试 = [];
测试(1)= 33777100285870080;
测试(2) = 33777100285870082;
但是当数字被放入数组时,最后一位数字丢失了:
unique(test)
ans = 3.3777e+16
我该如何防止这种情况发生?这些数字是 ID 代码,丢失最后一位数字会搞砸一切。
最佳答案
默认情况下,Matlab 对数字使用 64 位浮点表示法。它们具有以 10 为底的 16 位精度(或多或少),而您的数字似乎超过了该精度。
使用像 uint64
这样的东西存储您的号码:
> test = [uint64(33777100285870080); uint64(33777100285870082)];
> disp(test(1));
33777100285870080
> disp(test(2));
33777100285870082
这确实是一个舍入错误,而不是显示错误。要获得用于输出目的的正确字符串,请使用 int2str
,因为 num2str
使用 64 位浮点表示,并且在这种情况下存在舍入误差。
关于matlab - 如何停止matlab截断长数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038735/