【问题标题】:Python - random float with limited decimal digitsPython - 具有有限十进制数字的随机浮点数
【发布时间】:2015-07-23 18:41:53
【问题描述】:

我刚刚发现了如何在 Python 中生成随机数,但是如果我将它们打印出来,它们都有 15 个十进制数字。我该如何解决? 这是我的代码:

import random
import os

greaterThan = float(input("Your number will be greater than: "))
lessThan = float(input("Your number will be less than: "))
digits = int(input("Your number will that many decimal digits: "))

os.system('cls')

if digits == 15:
    print(random.uniform(greaterThan, lessThan))

if digits == 14:
    print(random.uniform(greaterThan, lessThan))

if digits == 13:
    print(random.uniform(greaterThan, lessThan))

if digits == 12:
    print(random.uniform(greaterThan, lessThan))

if digits == 11:
    print(random.uniform(greaterThan, lessThan))

if digits == 10:
    print(random.uniform(greaterThan, lessThan))

*(这只是持续到 0)

我知道你可以像print("%.2" % someVariable) 那样做,但是 Python 用这种方法创建的随机数不会保存在任何变量中。至少我是这么认为的。 我也想知道是否有办法让变量选择小数点的数量,比如print("%." + digits % anotherVariable),但我试过了,当然失败了。

我真的不知道。希望您能提供帮助。 谢谢。

【问题讨论】:

  • 您是否尝试过将数字除以 100(例如,得到 2 位小数)?如果你想要 3 位小数,你应该除以 1000,依此类推。 number/1000
  • 您的if 块都具有完全相同的内容。为什么你希望他们表现不同?
  • 另外,它不是print("%.2 % someVariable)。这是print("%.2 % someExpression)。您可以使用 random.uniform(greaterThan, LessThan) 作为该表达式。
  • 谢谢。我没想到他们的行为会有所不同。我只是想加上“差异”,但我不知道怎么做,所以我问了这个问题。
  • @SALZKARTOFFEEEL 如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到您满意的解决,并为帮助您的人提供帮助。 See here 以获得完整的解释。

标签: python random decimal-point


【解决方案1】:

如果您想从random.uniform 获取任何数字并将其截断为特定位数,您可以使用round() function

它允许您四舍五入到特定的精度。例如:

import random

greaterThan = float(input("Your number will be greater than: "))
lessThan = float(input("Your number will be less than: "))
digits = int(input("Your number will that many decimal digits: "))

rounded_number = round(random.uniform(greaterThan, lessThan), digits)
print(rounded_number)

【讨论】:

    【解决方案2】:

    您还可以使用.format() 处理浮点精度:

    print float("{0:.2f}".format(random.uniform(greaterThan, lessThan)))
    

    2 可以替换为你想要的小数点后多少位。

    【讨论】:

      【解决方案3】:

      我不确定您所说的“修复它”是什么意思,因为您所说的对于计算机如何执行所谓的floating-point arithmetic 非常基础。

      不过,话虽如此,我很确定您正在寻找decimal module

      import decimal
      

      祝你好运!

      编辑:

      再看一遍你的帖子,感觉很奇怪。这是家庭作业吗?如果你没有对它的价值做任何事情,为什么还要有 digits 变量呢?当然,你检查它(一遍又一遍),但你每次都在做同样的事情。

      如果您实际上对digits 的每个值都做了不同的处理,那么您应该使用 if-elif-else:

      if digits == 15:
          do_stuff()
          ...
      elif digits == 14:
          do_other_stuff()
          ...
      elif digits == 13:
          do_even_moar_different()
          ...
      ...
      else:
          and_now_for_something_completely_different()
      

      但这很难看,Python 应该很漂亮 (import this)。

      if digits > some_value:
          do_stuff()
          ...
      elif digits <= some_other_value:
          do_something_else()
      ...
      

      我鼓励您阅读floating-point arithmetic 链接,因为理解这一点非常重要,至少要理解一点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 1970-01-01
        • 2013-05-26
        相关资源
        最近更新 更多