将浮点数四舍五入到最近的十分位。

11

我想要对两个浮点数进行取整,但是它输出的结果没有小数,仅仅将其四舍五入到最接近的整数,例如21.3会变为21。当我加上“,2”后,它应该四舍五入到最近的十分位。

新代码:

def add(op1,op2):
    result = int(round(op1 + op2, -1))
    print("")
    print ("Output: %d + %d = %d" % (op1, op2, result))

输出:

Output: 10 + 10 = 20

输出:

Output: 10.3 + 10.9 = 21.0

代码:

def add(op1,op2):
    result = int(round(op1 + op2, 1))
    print("")
    print ("Output: %0.1f + %0.1f = %0.1f" % (op1, op2, result))

你说的 "when I put ",2"" 是什么意思 - 你能展示一下你的代码吗? - Burhan Khalid
抱歉,我之前翻译过了,但所有的评论都被删除了,我不知道为什么。 - user2839430
如果你想打印浮点数,难道不应该使用 "%.1f" 而不是 "%d" 吗? - wflynny
另外,print("")的目的是什么? - wflynny
你说得对,比尔!那就是问题所在,我忘记了。谢谢! - user2839430
你仍在将 'result' 转换为 'int'。小数部分总是为零。它总是朝着零舍入 (int(-0.9) == 0)。你确定这样做是正确的吗? - jpkotta
4个回答

24

以下是如何将数字四舍五入至最接近的十分位:

>>> round(21.3331, 1)
21.3

这里是如何打印一个保留一位小数的浮点数:

>>> print "%.1f" % (21.3331,)
21.3

请注意,如果您使用%d进行操作,则会将其打印为最接近的整数:

>>> print "%d" % (21.3331,)
21

请查看String Formatting Operations文档了解更多有关%格式化的信息。


我尝试了这个,但是出现了另一个问题,我没有注意到,你能帮忙看一下吗? - user2839430
@user2839430:int(x)通过执行floor(x)来给你一个整数。如果你想要小数,那么就执行round(op1 + op2, 1),而不是int(round(op1 + op2, 1)) - Claudiu

2

这是一个简单的例子。

roundf(1.345 * 100) / 100

你只需要在除以100之前将其乘以100,这样可以保留两位小数。这比将其转换为字符串再转回来要高效得多。


1
你正在将数据转换为 int 类型。这意味着你的结果是一个整数,没有小数部分。另外,"%d" 表示格式化为 int,因此在打印之前会隐式地转换为 int。请在格式字符串中使用 "%f"
def add(op1,op2):
    result = round(op1 + op2, 1)
    print("")
    print ("Output: %0.1f + %0.1f = %0.1f" % (op1, op2, result))

1
这里有两件事情:
  1. 正在计算的数字是否有小数部分?它们是整数(不带小数的数字)还是浮点数(带小数点的数字)。

  2. 如何展示它们?

重要的是要区分两者:
  1. 对两个整数进行任何操作都将得到一个整数;即没有小数部分的数字。这是结果的内部类型。

  2. 如果你对两个浮点数(带小数点的数字)进行任何计算,结果将是一个浮点数。

  3. 如果你对一个整数和一个浮点数进行操作,结果将是一个浮点数。

round 函数会改变浮点数的 精度(你所关注的小数点后有多少位)。到目前为止,我们还没有讨论如何 显示打印 这些内容。
要打印带有小数部分的数字,您需要格式化其显示方式,而不是更改其存储和使用方式,这不会影响数字类型。在这里,您可以看到我正在打印一个整数,即使它没有小数部分:
>>> i = 10 + 10
>>> i
20
>>> print("{0:.2f}".format(i))
20.00

如果您有一个带小数部分的数字,则根据您如何显示它,会发生各种事情:

>>> i = 1.24556434532
>>> print("{0:.2f}".format(i))
1.25
>>> print("{0:.1f}".format(i))
1.2
>>> print("{0:.3f}".format(i))
1.246

因此,请确保您在正确的位置做正确的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接