如何在强制数字与我第一次输入的数字一样多的同时使用 round()
How can I use round() while forcing the digits to be as much as I firstly entered
import random
userask = float(input("enter number: "))
userask = userask + ((random.randrange(20)*userask)/random.randint(3, 100))
print("new value is " + str(userask))
假设我的输入是 123.0123
我希望程序在此类操作后强制新值具有与我的初始输入相同的位数,舍入结果。
一个例子:我的输入是 102.31,新值应该有两位数并且四舍五入。
我已阅读 round()
文档,但找不到对此有用的内容。你会怎么做?
你可以试试这个:
import random
userask = input("enter number: ")
lst = userask.split('.')
digits = 0 if len(lst)==1 else len(lst[1])
userask = float(userask)
userask = userask + ((random.randrange(20)*userask)/random.randint(3, 100))
print("new value is " + '{:.{}f}'.format(digits).format(userask))
您可以执行以下操作:
import random
import re
inp = input("enter number: ")
if '.' in inp:
num_digits = len(inp.split('.')[1])
else:
num_digits = 0
val = float(inp)
val = val + ((random.randrange(20)*val)/random.randint(3, 100))
if num_digits:
res = round(val, num_digits)
else:
res = int(val)
print("new value is " + str(res))
此代码也适用于 int
和 float
,请注意,如果您不介意输出将打印为,则第二个 if 不是必需的float
,这意味着对于 int
它将在小数位有一个 0 (13 -> 13.0)
通知
您应该始终检查输入的内容是否符合您程序的预期行为,在这种情况下,您可能应该检查输入的值是否具有正确的 "looks" 数字 float
或int
.
在这种情况下,您可以这样做:
checker = re.compile('^[0-9]+.?[0-9]*$')
is_valid = bool(checker.match(inp))
如果 is_valid
不是 True
那么输入的值有问题
import random
userask = float(input("enter number: "))
userask = userask + ((random.randrange(20)*userask)/random.randint(3, 100))
print("new value is " + str(userask))
假设我的输入是 123.0123
我希望程序在此类操作后强制新值具有与我的初始输入相同的位数,舍入结果。
一个例子:我的输入是 102.31,新值应该有两位数并且四舍五入。
我已阅读 round()
文档,但找不到对此有用的内容。你会怎么做?
你可以试试这个:
import random
userask = input("enter number: ")
lst = userask.split('.')
digits = 0 if len(lst)==1 else len(lst[1])
userask = float(userask)
userask = userask + ((random.randrange(20)*userask)/random.randint(3, 100))
print("new value is " + '{:.{}f}'.format(digits).format(userask))
您可以执行以下操作:
import random
import re
inp = input("enter number: ")
if '.' in inp:
num_digits = len(inp.split('.')[1])
else:
num_digits = 0
val = float(inp)
val = val + ((random.randrange(20)*val)/random.randint(3, 100))
if num_digits:
res = round(val, num_digits)
else:
res = int(val)
print("new value is " + str(res))
此代码也适用于 int
和 float
,请注意,如果您不介意输出将打印为,则第二个 if 不是必需的float
,这意味着对于 int
它将在小数位有一个 0 (13 -> 13.0)
通知
您应该始终检查输入的内容是否符合您程序的预期行为,在这种情况下,您可能应该检查输入的值是否具有正确的 "looks" 数字 float
或int
.
在这种情况下,您可以这样做:
checker = re.compile('^[0-9]+.?[0-9]*$')
is_valid = bool(checker.match(inp))
如果 is_valid
不是 True
那么输入的值有问题