在Matlab R2015b試試這個:爲什麼sprintf('%i',x)顯示科學記數法?
>> sprintf('%i\n',uint64(2)^62)
ans =
4611686018427387904 %// correct
>> sprintf('%i\n',uint64(2)^63)
ans =
9.223372e+18 %// why scientific notation?
R2010b中它更糟糕的是:一些低至uint64(2)^31
已經導致出現此問題:
>> sprintf('%i\n',uint64(2)^31)
ans =
2.147484e+009
爲什麼sprintf
用科學記數法與'%i'
或'%d'
格式說明符?這可以避免嗎?
使用num2str
而不是sprintf
不是我的解決方案。儘管它確實避免科學記數法,
>> num2str(uint64(2)^63)
ans =
9223372036854775808 %// correct
我需要使用sprintf
因爲num2str
不支持「前導空格」格式說明:
>> sprintf('% 25i\n',uint64(2)^62, uint64(2)^50)
ans =
4611686018427387904
1125899906842624 %// correct: leading spaces to give 25 characters for each number
>> num2str([uint64(2)^62;uint64(2)^50], '% 25i\n')
ans =
4611686018427387904
1125899906842624 %// incorrect: no leading spaces
>> num2str(uint64(2)^50, '% 25i\n')
ans =
1125899906842624 %// incorrect: no leading spaces
這是因爲最大整數大小(2^63-1 afaik)是否超出? – Adriaan
@Adriaan不,不可能是原因,因爲最大值實際上是[2^64-1](http://es.mathworks.com/help/matlab/ref/uint64.html) –
聽起來像是錯誤恕我直言。 – rayryeng