在 Matlab 或 Simulink 中将小数转换为整数。 (不四舍五入)
Converting a Decimal to an Integer in Matlab or Simulink. (Not Rounding)
所以这可能是一个简单的问题。我有一些传入的小数点 .12345,我想把它变成 12345。现在这个值可以改变,所以我不想只将它乘以 100,000。例如,如果传入值是 .123,我想要 123,如果是 .3219,我想要 3219。
这里有一些可以玩的东西:(假设您输入的是一个数字(双精度或单精度)
f=@(x) x*10^sum(floor(x*10.^[0:16])~=x*10.^[0:16])
这假设浮点精度高达 16 位...
尝试f(.123)
...
补充说明,输出看起来像一个整数,但它实际上仍然是一个 double\single。为了真正使它成为一个整数 class 你需要用 uint64(f(x))
或任何你需要的 integer type 来转换。
另一种解决方案是使用 num2str 转换为字符串,取出 0。然后使用 str2num 转换回 num:
f=@(x) str2num(subsref(num2str(x),struct('type','()','subs',{{1,3:numel(num2str(x))}})));
丑陋但有效...
所以这可能是一个简单的问题。我有一些传入的小数点 .12345,我想把它变成 12345。现在这个值可以改变,所以我不想只将它乘以 100,000。例如,如果传入值是 .123,我想要 123,如果是 .3219,我想要 3219。
这里有一些可以玩的东西:(假设您输入的是一个数字(双精度或单精度)
f=@(x) x*10^sum(floor(x*10.^[0:16])~=x*10.^[0:16])
这假设浮点精度高达 16 位...
尝试f(.123)
...
补充说明,输出看起来像一个整数,但它实际上仍然是一个 double\single。为了真正使它成为一个整数 class 你需要用 uint64(f(x))
或任何你需要的 integer type 来转换。
另一种解决方案是使用 num2str 转换为字符串,取出 0。然后使用 str2num 转换回 num:
f=@(x) str2num(subsref(num2str(x),struct('type','()','subs',{{1,3:numel(num2str(x))}})));
丑陋但有效...