如何在强制数字与我第一次输入的数字一样多的同时使用 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))

此代码也适用于 intfloat,请注意,如果您不介意输出将打印为,则第二个 if 不是必需的float,这意味着对于 int 它将在小数位有一个 0 (13 -> 13.0)

通知

您应该始终检查输入的内容是否符合您程序的预期行为,在这种情况下,您可能应该检查输入的值是否具有正确的 "looks" 数字 floatint.

在这种情况下,您可以这样做:

checker = re.compile('^[0-9]+.?[0-9]*$')
is_valid = bool(checker.match(inp))

如果 is_valid 不是 True 那么输入的值有问题