首页 > 解决方案 > 我们如何将浮点数拆分为整数和小数部分?

问题描述

我想检测数字的浮点和整数部分,例如235.102457.

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

A=235
B=102457

我怎样才能拆分这个号码?

标签: matlabnumbersnumber-formatting

解决方案


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

您可以使用 将数字转换为字符串num2str(),使用 分割点strsplit(),然后使用 将每个部分转换回双精度数str2num()

注意16调用num2str: 默认情况下,字符串中只有 4 个小数位。基本上任何足够高的数字都可以,只要你的数字的小数部分小于这个。不过,将其设置得更高可以增加运行时间。


在数字上做到这一点很困难。指定小数位数然后四舍五入,就像其他答案一样,工作,但有一个缺点,例如1.1, 1.0, 1.100等被视为相同。由于数值精度,尝试递归查找功率不起作用:

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

在循环中,没有办法知道什么时候四舍五入,因此试图递归地找到有效数字的数量,kk在这种情况下,失败了(除非舍入魔法以某种方式设法舍入而不去掉所需的小数位)。


推荐阅读