将浮点数转换为适合范围的整数

时间:2017-10-07 13:42:09

标签: python integer range decimal

问题

我的程序检索一个适合0.0到1.0范围的长浮点数列表。但是,我需要将这些浮点数转换为适合任意给定范围的整数。它必须在转换时按比例说出。这样做最快的方法是什么?

- 该程序不是伪随机生成器

预期行为示例

(范围包括最后一位数字,因此范围0-30, 1, 2, 3等等......)

  1. 给定一个浮点0.230293857162和一个范围0-3,它应该返回int 0
  2. 给定一个浮点0.873102005290和一个范围0-9,它应该返回int 8
  3. 给定一个浮点0.596830273110和一个范围0-1,它应该返回int 1
  4. 说明

    对于第一个,范围0中的0-3相当于说浮点数0.0 <= x < 0.25

    对于第二个,范围8中的0-9相当于说浮点数0.8 <= x < 0.9

    对于第3个,范围1中的0-1相当于说浮点数0.5 <= x <= 1.0

2 个答案:

答案 0 :(得分:2)

0到1范围可以被认为是百分比,因此您只需要将该数字乘以范围长度并将其添加到范围的下限。

示例:

浮点数为0.7,因此它代表70%。

范围是1到9,然后范围长度是9 - 1 = 8.

8 * 0.7 = 5.6

1是范围的下限,因此我们将1加到5.6 = 6.6

如果你截断结果,你得到一个6,如果你将它均匀地舍入,你得到一个7。

您可以通过测试限制来测试这一点:
对于0 =&gt;结果是1
对于1 =&gt;结果是9

答案 1 :(得分:0)

获得随机整数的最快方法是使用numpy:

# np.random.randint(lower_bound, upper_bound, shape)

np.random.randint(10, 20, (2, 2))

array([[14, 18],
       [19, 18]])

虽然如果你想使用你已经生成的浮点数,只需使用这个简单的等式:

# random_int = int(round(random_float*range + lower_bound))

random_int = int(round(0.873102005290*9 + 0))