【问题标题】:How to remove last decimal digit from float in python?如何从python中的浮点数中删除最后一个十进制数字?
【发布时间】:2022-01-20 14:11:41
【问题描述】:

假设我有一个任意浮点数 x = 123.123456 并想从浮点数中删除最后 n 个十进制数字,即 n = 1 然后 x = 123.12345n = 2 然后 x = 123.1234 等等。这在python中如何实现?

【问题讨论】:

  • 你试过什么?也许您可以将其转换为字符串(假设不需要四舍五入)然后使用切片?
  • 我还没试过,希望能在这里找到问题和答案,显然不是,所以我问了。
  • 这个问题对于浮点数看起来相当复杂。甚至可能没有完全明确定义。我认为第一步是将x 表示为十进制数(浮点数不是十进制数)。也许这可以通过 python 的标准库模块 Decimal 来完成,或者巧妙地使用 fractions.Fraction(x).limit_denominator()
  • 你想改变这个值,还是为了表示目的,例如打印?此外,通常人们知道他们想要多少有效的小数位,而不是从末尾删除多少。
  • 以下似乎适用于浮点数:float = 123.456 n = 1 str = str(float) str = str[:-n] float(str) #123.45

标签: python python-3.x math floating-point


【解决方案1】:

这可以解决您的问题,但请注意浮点数的问题。

# let's cut 2 digits
n = 2

# naively we can do this
f = 123.123456
short_f = float(str(f)[:-n])

# but watch out for floating point error
f = 1.2 - 1.0  # f should be 0.2 but is actually 0.19999999999999996
short_f = float(str(f)[:-n])  # so this gives 0.199999999999999

这听起来像是XY problem,也许您正在寻找roundstring formatting

【讨论】:

  • 我赞成的答案是您更强调了“浮点数的问题”。例如:f = 123.123456; for _ in range(5): f = f + 0.000001。现在,str(f)'123.12346099999999' 而不是 '123.123461'
  • 我会再强调一些你是对的。
猜你喜欢
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2020-11-14
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多