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

问题描述 投票:0回答:2

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

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

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

谢谢你的帮助,哈利

python function rounding scientific-notation
2个回答
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')

0
投票

舍入原始数字按照您希望的方式工作,因此您可以这样做:

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

将其转换为浮点数,舍入,然后返回到小数。

© www.soinside.com 2019 - 2024. All rights reserved.