Python - 小数位数有限的随机浮点数

Python - random float with limited decimal digits

我刚刚在 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) 但我试过了,当然失败了。

我真的不知道。希望你能帮忙。 谢谢

我不确定你所说的 "fixing it" 是什么意思,因为你所说的是计算机如何执行所谓的 floating-point arithmetic.

的基础知识

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

import decimal

祝你好运!

编辑:

再看看你的 post,这感觉很奇怪。这是家庭作业吗?如果您不对它的值做任何事情,为什么还要使用 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 link,因为理解这一点非常重要,至少要了解一点。

如果您想从 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)

您还可以使用 .format():

处理浮点精度
print float("{0:.2f}".format(random.uniform(greaterThan, lessThan)))

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