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
可以替换成你想要的小数点后多少位。
我刚刚在 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
可以替换成你想要的小数点后多少位。