我们有一个类有一个float[]
和一个int[]
。有时,该类的用户需要放置float valuse,有时需要int值,但不会同时为每个实例。
我们知道所有可能的浮点数和int值都不会很大(小于100000)。我想我们可能不需要int[]
,只需在必要时使用float[]
来保存int值。在我们使用它们时,我们可以在必要时将它们转换为int。一个存储阵列将非常清晰。
您如何看待我的想法?将int放入float []不会丢失任何东西。我是对的?
修改
一个类有一个float[]
类变量和一个int[]
类变量来保存用户的值。用户将使用float []或int [],但不能同时使用。所以我们得到float []并设置float []方法,得到int []和set int []方法,以及不同的构造函数。我想通过删除int []类变量来简化这个类,并对不同用户的int值和float值使用float []。
答案 0 :(得分:4)
对于小于100,000的值,应该没问题。不是所有 int
值都可以完全表示为float
(毕竟它们都是32位数据类型),但在该范围内你应该没问题。
我不确定这是一个好主意,请注意,但它应该有用。
答案 1 :(得分:4)
float
具有24位精度(和符号位),这意味着您可以在{16777216到16777216之间存储int
值,而不会损失精度。
如果您的所有值都是偶数或10或100的倍数,则可以安全地存储更大的值。重要的是,你的数字除以它们所有的2的幂必须在范围内。
要合并int
和float
,我会使用double
来保存所有可能的float和int值。这种消耗的额外内存不太可能显着。 (除非你有数百万这些)
答案 2 :(得分:3)
三个单独的答案,具体取决于您的使用案例:
如果需要公开实际的int数组或float数组,请将您的成员变量设为Object,并根据需要强制转换为int []或float []。
如果您对空间效率不感兴趣,请使用泛型和ArrayList< T>其中T为整数或浮点数
如果你想要自虐,(并且不需要暴露实际数组)你可以只使用一个int [],然后使用Float.floatToRawIntBits()和Float.intBitsToFloat(int)转换一个浮动到四个字节,分别存储为int,反之亦然。