Python - 圆形函数显示不需要的科学记数法

时间:2017-12-29 22:32:53

标签: python function rounding scientific-notation

我遇到python中的round()函数问题。当我将数字四舍五入到多个小数位(意图取出尾随零)时,输出通常以科学计数法给出。 e.g:

round(75435000000.00,-6)= 7.5435E + 10

我需要以正常表示法输出,即75435000000.我使用十进制模块作为所涉及数字的十进制数据类型,并且在此模块内部是.normalize()方法,它取出尾随零并将科学记数法转换为正常符号,但我无法使其发挥作用。

感谢您的帮助, 哈利

2 个答案:

答案 0 :(得分:0)

对原始数字进行舍入可以按照您希望的方式进行,因此您可以执行此操作:

def round_decimal(n, places):
    return Decimal(round(float(n), places))

将其转换为浮点数,舍入,然后再转换为小数。

答案 1 :(得分:0)

Python decimal.Decimal数字有符号,数字和指数。给定的十进制数可以多种方式写入,例如1230E0或123E1和这些(比较相等)在decimal模块中具有不同的表示。

这是故意的;语义差异是重要的。 (正如在点对100球场之后的100.00到两个位置)。

同样适用于舍入操作前后示例中的数字。通过四舍五入,你正在剥夺意义。 decimal切换到科学记数法,因为它是避免显示不具有重要意义的尾随零的唯一方法。

x = decimal.Decimal('75435000000.00')
x
# Decimal('75435000000.00')
y = round(x, -6)
y
# Decimal('7.5435E+10')

使用x可以看到yas_tuple之间的表示差异:

x.as_tuple()
# DecimalTuple(sign=0, digits=(7, 5, 4, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0), exponent=-2)
y.as_tuple()
# DecimalTuple(sign=0, digits=(7, 5, 4, 3, 5), exponent=6)
没有尾随零的

y被认为是规范化表示。

x.normalize()
# Decimal('7.5435E+10')

quantize可以让您回到首选表单。

z = y.quantize(0)
z
# Decimal('75435000000')

或者,如果您需要点后两位数字:

y.quantize(decimal.Decimal('0.00'))
# Decimal('75435000000.00')