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

时间:2015-07-23 18:41:53

标签: python random decimal-point

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

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

3 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:3)

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

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

2可以替换为您想要的小数点后的位数。

答案 2 :(得分:1)

我不确定“修复它”是什么意思,因为你所谈论的内容对于计算机如何执行所谓的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链接,因为这一点非常重要,至少可以理解一下。