我可以使用float []来保持整数吗?

时间:2011-05-10 16:38:29

标签: java

我们有一个类有一个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 []。

3 个答案:

答案 0 :(得分:4)

对于小于100,000的值,应该没问题。不是所有 int值都可以完全表示为float(毕竟它们都是32位数据类型),但在该范围内你应该没问题。

我不确定这是一个好主意,请注意,但它应该有用。

答案 1 :(得分:4)

float具有24位精度(和符号位),这意味着您可以在{16777216到16777216之间存储int值,而不会损失精度。

如果您的所有值都是偶数或10或100的倍数,则可以安全地存储更大的值。重要的是,你的数字除以它们所有的2的幂必须在范围内。

要合并intfloat,我会使用double来保存所有可能的float和int值。这种消耗的额外内存不太可能显着。 (除非你有数百万这些)

答案 2 :(得分:3)

三个单独的答案,具体取决于您的使用案例:

  1. 如果需要公开实际的int数组或float数组,请将您的成员变量设为Object,并根据需要强制转换为int []或float []。

  2. 如果您对空间效率不感兴趣,请使用泛型和ArrayList< T>其中T为整数或浮点数

  3. 如果你想要自虐,(并且不需要暴露实际数组)你可以只使用一个int [],然后使用Float.floatToRawIntBits()Float.intBitsToFloat(int)转换一个浮动到四个字节,分别存储为int,反之亦然。