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

14

我刚刚学会了如何在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 - juanmajmjr
你的所有 if 块都有完全相同的内容。你为什么期望它们会有不同的行为呢? - TigerhawkT3
另外,它不是 print("%.2 % someVariable)。而是 print("%.2 % someExpression)。你可以使用 random.uniform(greaterThan, LessThan) 作为该表达式。 - TigerhawkT3
谢谢。我没想到它们会有不同的行为。我只是想添加“差异”,但不知道如何操作,所以才提出了这个问题。 - SALZKARTOFFEEEL
@SALZKARTOFFEEEL 如果下面的任何一个答案解决了您的问题,您应该接受它(单击适当答案旁边的复选标记)。这样做有两个作用。它让每个人都知道您的问题已经得到满意的解决,并且它为帮助您的人提供了帮助的信用。请参见此处的完整说明:http://meta.stackexchange.com/a/5235。 - Morgan Thrapp
3个回答

27
如果您想将从random.uniform得到的任何数字截断为特定位数,可以使用round()函数。它允许您按特定精度进行四舍五入。例如:
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可以替换为你想要保留的小数位数。


1

我不确定您所说的“修复”是什么意思,因为您所谈论的内容是计算机执行所谓浮点运算的基础。

但是,话虽如此,我非常确定您正在寻找十进制模块

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()
...

我鼓励您阅读浮点运算链接,因为这非常重要,至少需要了解一些。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接