【问题标题】:Get last three digits of an integer获取整数的后三位
【发布时间】:2015-04-18 16:19:43
【问题描述】:

我希望将整数,例如 23457689 更改为 689,将 12457245 更改为 245 等。

我不需要对数字进行四舍五入,也不希望必须转换为字符串。

有什么想法可以在 Python 2.7 中完成吗?

【问题讨论】:

    标签: python integer int digit


    【解决方案1】:

    使用% 操作:

    >>> x = 23457689
    >>> x % 1000
    689
    

    %mod(即modulo)操作。

    【讨论】:

    • 谢谢!这正是我所需要的。
    【解决方案2】:

    正确处理正整数和负整数:

    >>> x = -23457689
    >>> print abs(x) % 1000
    689
    

    作为一个函数,您可以选择要保留的前导位数:

    import math
    def extract_digits(integer, digits=3, keep_sign=False):
        sign = 1 if not keep_sign else int(math.copysign(1, integer))
        return abs(integer) % (10**digits) * sign
    

    避免转换为str 的约束过于迂腐。如果数字的格式可能会发生变化,或者需要保留的尾随数字的格式会发生变化,那么转换为 str 将是一个很好的方法。

    >>> int(str(x)[-3:])
                  ^^^^^ Easier to modify this than shoe-horning the mod function.
    

    【讨论】:

    • 谢谢,但我只需要提取最后一位数字并绘图,这些值永远不会改变。我也可以用这个
    • “价值观永远不会改变......”每个程序员都说过。
    • 我喜欢这个答案,因为它提出了可能是负输入的问题,并且因为它提供了基于字符串的替代方案。但是,我不喜欢它假设应该如何处理负输入(例如,如果他们想保留符号怎么办?),并且我不同意字符串切片比模组功能。
    • @JohnY 好吧,例如,如果需要相同的代码从固定精度 float 中提取数字,那么 mod 将毫无用处(特别是考虑到舍入),但相同的 @基于 987654328@ 的规则(或简单的更改,例如在 . 上拆分)可能仍然有效。 str 方法在它是重要的整数的实际属性的情况下效果很好(比如mod-ing 它).. 但它在它是一个更复杂的属性时效果很好数字。这就是我的意思是在格式发生变化时更容易。 mod 在这种情况下对非算术变化很脆弱。
    猜你喜欢
    • 2019-03-30
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2017-07-05
    • 2012-06-05
    • 2020-07-23
    相关资源
    最近更新 更多