Python 如何使用round()同时强制数字与第一次输入的数字相同
假设我的输入是123.0123Python 如何使用round()同时强制数字与第一次输入的数字相同,python,python-3.x,numbers,rounding,Python,Python 3.x,Numbers,Rounding,假设我的输入是123.0123 我希望程序在执行此操作后强制新值具有与初始输入相同的位数,将结果四舍五入 例如:我的输入是102.31,新值应该有两位数字并四舍五入。 我已经阅读了round()文档,但找不到对此有用的东西。你会怎么做 您可以尝试以下方法: import random userask = float(input("enter number: ")) userask = userask + ((random.randrange(20)*userask)/random.randint
我希望程序在执行此操作后强制新值具有与初始输入相同的位数,将结果四舍五入
例如:我的输入是102.31,新值应该有两位数字并四舍五入。
我已经阅读了
round()
文档,但找不到对此有用的东西。你会怎么做 您可以尝试以下方法:
import random
userask = float(input("enter number: "))
userask = userask + ((random.randrange(20)*userask)/random.randint(3, 100))
print("new value is " + str(userask))
您可以执行以下操作:
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))
此代码也适用于int
,也适用于float
,请注意,如果您不介意将输出打印为float
,则第二个if不是必需的,这意味着对于int
,它的小数点处将有一个0(13->13.0)
注意
您应该始终检查输入的输入是否与程序的预期行为相匹配,在这种情况下,您可能应该检查输入的值是否具有正确的数字“外观”float
或int
在这种情况下,您可以执行以下操作:
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))
如果
有效
无效为真则输入的值有问题未为浮点定义小数位数。你可以做的是以字符串形式计算点后的数字,然后将输入转换成浮点。这里是新的编程实践者。你能进一步解释一下吗?谢谢,对不起!一切都好。问题是,浮点以二进制格式存储在内存中,因此计算机不知道浮点的小数位数。这就是为什么在将输入转换为浮点之前,您应该捕获十进制数字的数量。然后您可以将此值传递为。谢谢,先生。最后一件事:如果我希望小数点精确地四舍五入到.5或.0,这取决于更接近的数值。例如,如果结果为444.200,则应四舍五入为444.0;如果结果为16.88,则应四舍五入至17。0@gonza作为问题的一部分,它将影响逻辑,但可能有一种不同的方法将两者结合起来,但您现在要问的是舍入到最接近的整数,因此它将是int(舍入(v))
;例如,444.200->444,16.8->17使用正则表达式查找点感觉是错误的,并且不是很像Python。您可以简单地使用inp:@Selcuk edited中的if.”,您是对的;这只是过度使用它,但因为我想提及正确检查输入的问题,这是使用regex完成的
checker = re.compile('^[0-9]+.?[0-9]*$')
is_valid = bool(checker.match(inp))