【问题标题】:Modulo 10 for large Numbers | Checking if a number is in powers of 10 [duplicate]大数取模 10 |检查一个数字是否是 10 的幂 [重复]
【发布时间】:2019-07-10 00:08:54
【问题描述】:

我想在 Python 中检查一个(大整数)值是否是 10 的幂。通常我会简单地检查该值的模 10。这适用于高达 1.E+22 的值,之后,它返回奇怪的值:

lowInteger = 1.E12
highInteger = 1.E23

print(lowInteger % 10)      #as expected returns 0
>>> 0.0

print(highInteger % 10)     #returns 2.0 instead of 0.0, 1.E23 returns 3.0, etc
>>> 2.0

【问题讨论】:

  • 你创建了浮点数而不是整数。

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


【解决方案1】:

浮点数1.E23 不是 10 的幂。它是最接近您想要的 10 的幂的可表示数字。它的实际值为

>>> int(1e23)
99999999999999991611392

如果您想要精确的整数,请使用整数,而不是浮点数。你想要10**23

>>> 10**23
100000000000000000000000

另外,如果你想检查一个数字是否是 10 的 powerx % 10 == 0 无论如何都是错误的检查,因为这是检查数字是否是一个 multiple 10 个。

【讨论】:

  • 解决了,谢谢。但我想我在 python 中读到过,浮点值并没有像 C/C++ 那样受到限制,这是一种误解吗?
  • @Torilla:我不知道你认为你是从哪里读到的,但这不是真的。 Python float 基本上只是 C double 的包装。
  • Python ints没有C整数类型的限制。
猜你喜欢
  • 1970-01-01
  • 2017-01-09
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
相关资源
最近更新 更多