如何将浮点数拆分为整数和小数部分?

mot*_*deh -2 matlab numbers number-formatting

我想检测像这样的数字的浮点数和整数部分235.102457

简而言之,想存储我的电话号码的两部分,例如:

A=235
B=102457
Run Code Online (Sandbox Code Playgroud)

我如何分割这个数字?

Adr*_*aan 7

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在这种情况下会失败(禁止四舍五入的魔术,以某种方式设法四舍五入而不会剥离期望的小数位)。