【问题标题】:Turning a float into an integer without rounding the decimal points将浮点数转换为整数而不舍入小数点
【发布时间】:2021-10-09 11:49:38
【问题描述】:

我有一个产生伪随机浮点数的函数,我想把它们变成整数, 但我并不是要绕过它们。 例如,如果输入是:

1.5323665

那么我希望输出是:

15323665

而不是 21,这是使用 round() 和 int() 得到的。

【问题讨论】:

  • int(str(your_number).replace(".", ""))
  • .25 应该产生什么? 25 或 250 或 2500?为什么?如果该值是0.333333333333333314829616256247390992939472198486328125但打印为“0.3333333333333333”,如果结果是333333333333333314829616256247390992939472198486328125或3333333333333333?你想产生什么样的整数分布?

标签: python floating-point type-conversion


【解决方案1】:

将其转换为字符串并删除一个点:

int(str(x).replace('.', ''))

【讨论】:

    【解决方案2】:

    你可以先把浮点数转换成字符串,然后去掉小数点再转换回int

    x = 1.5323665
    n = int(str(x).replace(".", ""))
    

    但是,这不适用于字符串表示默认为科学记数法的大数字。在这种情况下,您可以使用字符串格式:

    n = int(f"{x:f}".replace(".", ""))
    

    这仅适用于最多 6 个小数位,对于较大的数字,您必须使用 {number: .p} 语法自行决定精度,其中 p 是精度:

    n = int(f"{1.234567891:.10f}".replace(".", ""))
    
    

    【讨论】:

      【解决方案3】:
      x = 1.5323665
      y= int (x)
      z= str(x-y)[2:]
      o = int(len(z))
      print(int(x*10**o))
      

      它将返回 15323665

      【讨论】:

        【解决方案4】:

        与其创建自己的伪随机引擎,它几乎肯定不会有一个好的density distribution,特别是如果你以这种方式强制浮点数为整数,强烈考虑使用内置库来处理你所追求的范围!

        更具体地说,如果您没有良好的分布,您的数据可能会出现极端或无法解释的偏差(尤其是值倾向于某个共同值)

        如果您将数据绘制成图表,您可能能够观察到这一点,这可能是理解它的好方法!

        看看内置的random 库,它提供了一个整数范围函数,方便您使用

        https://docs.python.org/3/library/random.html#random.randint

        import random
        result = random.randint(lowest_int, highest_int)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-15
          • 1970-01-01
          相关资源
          最近更新 更多