首页 > 解决方案 > 如何将积分和小数部分转回 f32?

问题描述

所以我有一个数字,比如说4.2,我可以像这样提取整数和小数部分:

let value = 4.3;
let integral = f32::trunc(value);
let fractional = get_frac(value); // returns '3'

这会返回正确的东西,但我怎样才能把它变成一个f32?我将它们存储为整数,然后仅在以后需要将它们转换回浮点数。

是我进行转换的方式

标签: rustfloating-point

解决方案


您的函数get_frac()本质上不能反转,因为它将不同的小数部分映射到相同的整数值。对于4.24.02, 的返回值get_frac()都是 2。仅从结果中无法判断您从哪个原始值开始。

更好的方法是确定要在浮点数的整数表示中包含多少位。例如,如果您想包含四位十进制数字,只需将您的数字乘以 10,000 并四舍五入为整数。通过再次除以 10,000 可以近似地反转此操作。


推荐阅读