除了最後一位數字,這兩個長數字是相同的。如何停止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