Python - 圆形函数显示不需要的科学记数法
Python - Round Function displaying unwanted scientific notation
我在 python 中遇到 round() 函数的问题。当我将数字四舍五入到小数位时(目的是去除尾随零),输出通常以科学记数法给出。例如:
round(75435000000.00, -6) = 7.5435E+10
我需要以正常表示法输出,即 75435000000。我使用 decimal 模块来处理所涉及的数字的 Decimal 数据类型,该模块内部是 .normalize() 方法,它取出尾随零并将科学记数法转换为正常记数法,但我无法让它工作。
感谢您的帮助,
哈利
按您希望的方式对原始数字进行四舍五入,因此您可以这样做:
def round_decimal(n, places):
return Decimal(round(float(n), places))
将其转换为浮点数、整数,然后再转换回十进制。
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
和 y
之间的表示差异可以使用 as_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')
我在 python 中遇到 round() 函数的问题。当我将数字四舍五入到小数位时(目的是去除尾随零),输出通常以科学记数法给出。例如:
round(75435000000.00, -6) = 7.5435E+10
我需要以正常表示法输出,即 75435000000。我使用 decimal 模块来处理所涉及的数字的 Decimal 数据类型,该模块内部是 .normalize() 方法,它取出尾随零并将科学记数法转换为正常记数法,但我无法让它工作。
感谢您的帮助, 哈利
按您希望的方式对原始数字进行四舍五入,因此您可以这样做:
def round_decimal(n, places):
return Decimal(round(float(n), places))
将其转换为浮点数、整数,然后再转换回十进制。
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
和 y
之间的表示差异可以使用 as_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')