我一直在研究一个脚本,该脚本从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上调用此函数将不起作用。在使用此代码之前,您应该为此添加一个测试。