作者JACK19920102 ()
看板MATLAB
标题[讨论] 送p币 函式中的mod 不想要出现小数
时间Sat Aug 27 09:22:26 2016
我目前在写一个程式
其中一段会用到一个函式
函式的目的是要把十进位的整数
转换成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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1472260949.A.6B4.html
1F:推 profyang: int64试看看? 08/27 10:22
2F:推 profyang: 我的意思是把mm取代成int64(mm) 08/27 10:24
3F:推 tallman: 虽然不大会 但还是帮推 08/28 12:11
4F:推 bpsk: 祝你好运 08/31 01:09
5F:推 bpsk: 我用我的MATLAB不会有小数点欸 08/31 14:24
6F:推 warmtake: 你是不是改变了输出格式? 09/01 13:08
7F:→ warmtake: 在一开始使用format,9位数以内的是会用整数呈现 09/01 13:10
8F:→ JACK19920102: 差点忘记这篇文QQ 以上几位大大各送100P 09/17 01:16
9F:→ JACK19920102: 钱已发喔 谢谢 09/22 15:23