当前位置: 首页 > 面试题库 >

在Python中舍入一个数字,但保持零结尾

韩征
2023-03-14
问题内容

我一直在研究一个脚本,该脚本从Excel电子表格中获取数据,四舍五入并删除小数点,例如2606.89579999999变为26069。但是,即使有可能将数字四舍五入到两位小数尾随零,所以2606.89579999999应该变成260690。

我目前拥有它,因此i可以从Excel中的单元格中获取数据,并将其四舍五入到小数点后两位(i = round(i, 2)),这在上述示例中为我提供了一个小数点。

我试图弄清楚如何使其与一起使用Decimal,但似乎无法使其正常工作。

舍入后的所有其他数字(如果舍入后的值不以‘0’结尾)可以与一起使用round(i, 2),但是如果这些数字恰好以*
.x0结尾,则该0会掉落并与数据混淆。


问题答案:

在谈论尾随零时,这是一个关于字符串表示的问题,您可以使用

>>> "%.2f" % round(2606.89579999999, 2)
'2606.90'

或使用具有format功能的现代风格:

>>> '{:.2f}'.format(round(2606.89579999999, 2))
'2606.90'

并用replace或删除点translate_指的是python控制台中先前命令的结果):

>>> _.translate(None, '.')
'260690'

请注意,此处不需要四舍五入,因为.2f格式适用于相同的四舍五入:

>>> "%.2f" % 2606.89579999999
'2606.90'

但是正如您提到的excel一样,您可能会选择滚动自己的舍入函数,或使用小数,因为float.round浮点表示法会导致奇怪的结果:

>>> round(2.675, 2)
2.67
>>> round(2606.89579999999, 2)
2606.89

用十进制使用量化:

>>> from decimal import *
>>> x = Decimal('2606.8950000000001')
# Decimal('2606.8950000000001')
>>> '{}'.format(x.quantize(Decimal('.01'), rounding=ROUND_HALF_EVEN))
'2606.90'

对于您的原始任务,它变为:

>>> x = Decimal('2606.8950000000001')
>>> int((x*100).quantize(1, rounding=ROUND_HALF_EVEN))
260690

四舍五入的原因是Decimal

>>> x = Decimal(2606.8950000000001)
# Decimal('2606.89499999999998181010596454143524169921875') # internal float repr


 类似资料:
  • 我一直在编写一个脚本,该脚本从Excel电子表格中获取数据,对数字进行四舍五入,并删除小数点,例如,2606.89579999999变成26069。但是,我需要将数字四舍五入到小数点后两位,即使后面有零,所以2606.89579999999应该变成260690。 我现在有了它,所以我从Excel中的单元格中获取数据,并将其舍入到两位小数(),这在上面的示例中给出了一个小数点。 我试图弄清楚如何让它

  • 问题内容: 这个问题使我丧命。如何在Python中向上舍入一个数字? 我试过了舍入(数字),但它四舍五入数字。例: 我尝试了int(number + .5),但是它再次将数字取整!例: 然后我尝试了round(number + .5),但是在边缘情况下不起作用。例: 请指教。 问题答案: 该小区(上限)功能:

  • 有没有一个内置的函数可以像下面这样圆?

  • 问题内容: 如何将两个除数的结果取整,例如 和我一样 $ testOne应当将其舍入为“ 2”作为3/2 = 1.5的答案时包含“ 1” 问题答案: 要进行舍入运算,只需将其加到分子上即可。 例子,四舍五入: 例子,四舍五入: 要四舍五入,将其加到分子(一半将四舍五入):

  • 我在做我的作业题,就是“反转一个数字,保留前导零,删除尾随零,同时保持符号不变”。 如果我把它作为整数反转,它将删除前导和尾随的零,如果我把它作为字符串反转,它将保留所有的零。有人能帮我只保留前导零吗? 例如“-00360”应该是“-6300”。 问题- 编写一个Java函数来接受一个数字,并返回与之相反的数字。如果数字以一个或多个零结尾,那么在相反的数字中,这些零将不存在(因为这些零成为前导零)

  • 问题内容: 我希望能够在SQL中将数字四舍五入为n个有效数字。所以: 我知道ROUND()函数可以四舍五入到小数点后n位而不是有效数字。 问题答案: 应该做的把戏! 成功测试了您的两个示例。 编辑:在@ number = 0上调用此函数将不起作用。在使用此代码之前,您应该为此添加一个测试。