除了最后一位数字,这两个长数字是相同的。如何停止matlab截断长数字
test = []; test(1) = 33777100285870080; test(2) = 33777100285870082;
但是当数被放在数组中的最后一位丢失:
unique(test)
ans = 3.3777e+16
我如何避免这种情况?这些号码是身份证号码,丢失最后一位数字就是搞砸了一切。
除了最后一位数字,这两个长数字是相同的。如何停止matlab截断长数字
test = []; test(1) = 33777100285870080; test(2) = 33777100285870082;
但是当数被放在数组中的最后一位丢失:
unique(test)
ans = 3.3777e+16
我如何避免这种情况?这些号码是身份证号码,丢失最后一位数字就是搞砸了一切。
若要向@ rubenvb的解决方案添加更多解释,则对于IEEE 754 double precision floating-point,您的值大于flintmax
,即大于2^53
。在这之后,并不是所有的整数都可以完全表示为双打。另见this related question。
他们*只是作为ID码*和*是否没有算术运算*对他们做?如果这样存储为一个字符串可能是一个更好的选择... – RTL 2014-09-25 12:35:13
我试过,但我得到了类似的问题,num2str切断了最后一位数字。 – Lefti 2014-09-25 12:47:34
键入''eps(test(1))''返回''4''。这意味着下一个更大的可区分的数字与''test(1)''是'test(1)+ 4''。你可以通过''length(unique([test,test(1)+4]))''''''''''2''来验证。我相信你不能使用默认数字来解决这个问题,而是将这个id作为字符串读取(或输入)。 – Nras 2014-09-25 13:03:25