[討論] 送p幣 函式中的mod 不想要出現小數

看板MATLAB作者時間7年前 (2016/08/27 09:22), 編輯推噓6(603)
留言9則, 5人參與, 最新討論串1/1
我目前在寫一個程式 其中一段會用到一個函式 函式的目的是要把十進位的整數 轉換成factoradic base(階乘進位)的表示法 舉例: 十進位的 38 等於階乘進位的 12100 因為38 = 1*4! + 2*3! + 1*2! + 0*1! + 0*0! 轉換方式滿簡單的 38/1 = 38 ... 0 38/2 = 19 ... 0 19/3 = 6 ... 1 6/4 = 1 ... 2 1/5 = 0 ... 1 我函式的寫法如下: function u = dec_to_factoradic(mm,n) u = zeros(1,n); jj = 2; while mm~=0 u(n-jj+1) = mod(mm,jj); mm = floor(mm/jj); jj = jj+1; end 回傳的u就是像上面12100那種形式的陣列 n是階乘的個數 12100 的n 就是5 這個函式我在用數字代進去 測試時 沒有問題 但放在程式當中 因為有input變數 (mm) mm這個數 又會自動變成科學記號 比方像是8.0344e+05 這時第一次的while迴圈 就會出現小數點!? (而且只有第一次 後面就不會) mod(mm,jj) = mod(8.0344e+05,2) = 1.3717 這邊出現小數點 就會讓我的程式整個卡住 會讓階乘進位變成 7 5 3 0 1 3 2 1 1.3717 0 但是如果在command window 打上mod(8.0344e+05,2) 跑出來的卻又是0!? 我想要把科學記號改成完整呈現 但不知道怎麼用 目前的做法是在mod外面加上round或是floor 至少程式可以跑 但我不知道這樣在意義上是否不一樣!? 我為了這個地方已經整晚沒睡了qq 因此想來請教板上的高手大大們 是哪邊出問題 該怎麼做 我什麼地方犯錯沒注意到 或是函式有什麼其他的寫法 幫我解決問題的大大 贈送1000p聊表心意 其他只要前十個在這篇文章推文的id也各送100p 先謝謝大家了 好累qq -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.54.67 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1472260949.A.6B4.html

08/27 10:22, , 1F
int64試看看?
08/27 10:22, 1F

08/27 10:24, , 2F
我的意思是把mm取代成int64(mm)
08/27 10:24, 2F

08/28 12:11, , 3F
雖然不大會 但還是幫推
08/28 12:11, 3F

08/31 01:09, , 4F
祝你好運
08/31 01:09, 4F

08/31 14:24, , 5F
我用我的MATLAB不會有小數點欸
08/31 14:24, 5F

09/01 13:08, , 6F
你是不是改變了輸出格式?
09/01 13:08, 6F

09/01 13:10, , 7F
在一開始使用format,9位數以內的是會用整數呈現
09/01 13:10, 7F

09/17 01:16, , 8F
差點忘記這篇文QQ 以上幾位大大各送100P
09/17 01:16, 8F

09/22 15:23, , 9F
錢已發喔 謝謝
09/22 15:23, 9F
文章代碼(AID): #1NmEjLQq (MATLAB)