matlab - 我们如何将浮点数拆分为整数和小数部分?
问题描述
我想检测数字的浮点和整数部分,例如235.102457
.
简而言之,想存储我的号码的两部分,例如:
A=235
B=102457
我怎样才能拆分这个号码?
解决方案
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
在这种情况下,失败了(除非舍入魔法以某种方式设法舍入而不去掉所需的小数位)。
推荐阅读
- kotlin - 在 Iterable.sortedBy 中执行挂起函数
- pine-script - 脚本在 1 分钟 TF 上绘制,但不在其他 TF 上
- json - 逻辑应用程序执行直到错误 Http 获取请求解析 JSON
- c# - 通过 C# 中的 LINQ 查询过滤相同元素的两个列表
- django - MultipartParser 未验证 Django Rest Framework 中的数据
- scala - 如何加快在 aws spark(scala)中写入 csv 文件?
- python - Python Pandas 删除空单元格
- ios - 如何在我的反应原生项目中添加 Firebase
- javascript - 反应函数不返回值
- mysql - 从多个表中获取 ID