mot*_*deh -2 matlab numbers number-formatting
我想检测像这样的数字的浮点数和整数部分235.102457。
简而言之,想存储我的电话号码的两部分,例如:
A=235
B=102457
Run Code Online (Sandbox Code Playgroud)
我如何分割这个数字?
x=235.102457;
tmp = strsplit(num2str(x,16),'.'); % Cast to string, split on the dot
A = str2num(tmp{1}); % = 235
B = str2num(tmp{2}); % = 102457
Run Code Online (Sandbox Code Playgroud)
您可以通过使用将数字转换为字符串,使用num2str()分割点strsplit(),然后使用将每个部分转换为双精度来实现str2num()。
请注意,16在对的调用中num2str:默认情况下,字符串中仅放置4个小数位。基本上任何足够高的数字都可以,只要您的数字的小数部分小于此数字即可。但是,将其设置得较高可以增加运行时间。
从数字上执行此操作很困难。像其他答案一样,指定小数位数然后四舍五入是可行的,但缺点是例如对1.1, 1.0, 1.100etc等进行相同的处理。由于数值精度的原因,试图递归查找功效不起作用:
x = 235.102457;
A = fix(x);
tmp = x-A;
tmp*10^6
ans =
1.024569999999869e+05 % i.e. needs rounding
kk = 0;
while kk<32 && ~(mod(tmp,1)==0)
tmp = tmp*10;
kk = kk+1;
end
tmp
tmp =
1.024569999999869e+16 % Gets a lot of floating point garbage
Run Code Online (Sandbox Code Playgroud)
在循环中,没有办法知道什么时候四舍五入,因此试图递归地找到有效数字的数目,kk在这种情况下会失败(禁止四舍五入的魔术,以某种方式设法四舍五入而不会剥离期望的小数位)。