Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用round()同时强制数字与第一次输入的数字相同_Python_Python 3.x_Numbers_Rounding - Fatal编程技术网

Python 如何使用round()同时强制数字与第一次输入的数字相同

Python 如何使用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

假设我的输入是123.0123
我希望程序在执行此操作后强制新值具有与初始输入相同的位数,将结果四舍五入
例如:我的输入是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))