在 Python 中从小数中删除尾随零
Remove trailing zeros from decimal in Python
要从小数中删除尾随零:
- 使用
decimal.to_integral()
方法检查数字是否有小数部分。 - 如果是,则将数字四舍五入并返回。
- 如果没有,请使用该
decimal.normalize()
方法去除任何尾随零。
主程序
from decimal import Decimal num = Decimal('1.230000') # ✅ drop trailing zeros from decimal, using normalize() def remove_exponent(d): return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize() print(remove_exponent(num)) # 👉️ 1.23 # -------------------------------- # ✅ drop trailing zeros from decimal, using str.rstrip() num_2 = Decimal('1.230000') string = str(num_2) without_trailing_zeros = string.rstrip( '0').rstrip('.') if '.' in string else string result = Decimal(without_trailing_zeros) print(result) # 👉️ 1.23
第一个函数取自官方文档的
Decimal FAQ
部分。
to_integral
方法舍
入到最接近的整数。
主程序
from decimal import Decimal # 👇️ True print(Decimal('1.0000') == Decimal('1.0000').to_integral()) # 👇️ False print(Decimal('1.9000') == Decimal('1.9000').to_integral()) print(Decimal('1.0000').to_integral()) # 👉️ 1
如果数字没有小数部分,我们使用quantize()
方法四舍五入到固定的小数位数。
如果数字有小数部分,我们使用
Decimal.normalize
方法去除最右边的尾随零。
主程序
from decimal import Decimal print(Decimal('1.230000').normalize()) # 👉️ 1.23 print(Decimal('3.456000000').normalize()) # 👉️ 3.456
我们只normalize()
在数字有小数部分时才使用该方法,因为它可以删除小数点左侧的零。
主程序
from decimal import Decimal print(Decimal('500.000').normalize()) # 👉️ 5E+2 print(Decimal('510.100').normalize()) # 👉️ 510.1
或者,您可以使用该str.rstrip()
方法。
要从小数中删除尾随零:
- 使用
str()
该类将小数转换为字符串。 str.rstrip()
如果数字有小数点,则使用该方法去除尾随零。
主程序
from decimal import Decimal num = Decimal('1.230000') string = str(num) without_trailing_zeros = string.rstrip( '0').rstrip('.') if '.' in string else string result = Decimal(without_trailing_zeros) print(result) # 👉️ 1.23
第一步是将小数转换为字符串。
str.rstrip方法返回删除
了提供的尾随字符的字符串副本。
.
我们首先去除尾随零,然后如果小数部分仅由尾随零组成,则尝试去除点。该示例还检查字符串是否包含点,因此我们不会尝试从没有小数部分的数字中去除尾随零,例如5000
to 5
。